Python爬虫-BeautifulSoup

  • Python爬虫-BeautifulSoup

    • “美丽汤”的爱恨
    • 使用
    • 爱丽丝文档示例
      • 标签
      • 遍历
      • find(),findAll()
      • 综合使用
    • 支持正则
    • CSS选择器

“美丽汤”的爱恨

前边说偏爱xpath,在于操作简单,解析速度较快。但不可否认:BeautifulSoup比xpath稳定。但凡网页的标签顺序发生变化(增删改),基于xpath规则的提取方式极大可能就此失效,这样一来不得不“右键检查元素”,周而复始的修改xpath规则。而“美丽汤”提供了多种寻找标签方法,以图使用者达到最佳“确定标签”的目的,尽最大努力在网页发生改变的同时,旧代码仍然畅通无阻的运行。
可是成也萧何败萧何,考虑太多,“美丽汤”不得不显得“臃肿”,成为三个中解析速度中的最慢。然而比起令人生畏的正则,许多人也只好认了:“慢就慢吧”。
《Python网络数据采集》书中提到,BeautifulSoup一名源于《爱丽丝梦游仙境》里的同名诗歌。就突然好想去看,我说有空的话。

使用

关于环境安装的帖子网络上很容易找到,这里不提。

导包:from bs4 import BeautifulSoup
指定解析方式:soup = BeautifulSoup(response.text, "lxml")
或者页面写入本地,打开本地文件解析:soup = BeautifulSoup(open("xxxx"), "lxml")

爱丽丝文档示例


在一定的操作中以此范例文档试验(这是一个标签部分残缺的文档


格式化输出:print(soup.prettify())
效果:

可以看到,经过处理后,原示例的残缺部分被填充完整。所以我们应该针对处理之后的示例采取相应的提取措施


标签

soup.a返回第一个a标签

soup.parent返回a标签的父标签

soup.a.parent.name返回a标签的父亲标签的名字

soup.a.parents 返回a标签的父级以上标签,类型为迭代器

对应parents的是children,用法相同,返回子级标签,注意区别,parents是父级以上,children只有子级
soup.a.attrs返回a标签中的所有属性

soup.a.attrs["属性名"] 返回a标签指定属性对应的值

soup.title.string返回title标签中的文本信息
soup.head.string返回head标签中的文本信息

可以看到,返回结果相同,此方法也能返回注释信息

与字符串存在类型区别,但我认为没必要在入门的时候区分这些,以后需要的时候再研究就可以了


遍历

下行遍历:
.contents返回一个列表
.children返回一个迭代器
.descendants返回子孙级标签,上面两个只有子级

上行遍历:
.parents

平行遍历:
.next_sibling下一个平行标签
.previous_sibling上一个平行标签
.next_siblings后面所有平行标签,返回类型为迭代器
.previous_siblings前面所有平行标签,返回类型为迭代器


find(),findAll()

find(tag, attrs, recursive, text, keywords)
findAll(tag, attrs, recursive, text, limit, keywords)
区别:除了参数limit外,前者返回第一个符合条件的对象,后者以列表方式返回所有符合条件


——针对tag参数——–
-findAll("a")寻找所有a标签
-findAll({"a", "b", "p"})寻找所有a,b,p标签
——针对attrs参数——-
+findAll("a", {"class":"sister"})寻找标签a且属性class=”sister”
+findAll("a", {"class":{"sister", "brother"})寻找标签a且属性class=”sister”或者brother
+findAll("", {"class":"sister"})不限定标签类型,返回符合属性条件的标签
+以上可以看出,attrs属性不能单独使用
——针对text参数——–
-findAll(text="test")区配文本内容为test的标签,返回该内容的列表

——-针对keyword参数——–
+findAll(id="link1")寻找属性id=”link1”的标签
+findAll(class_="sister")寻找属性class=”sister”的标签,由于class是python的关键字,所以为了避免冲突,需要加”_”符号
但可以用前面方法替代:soup.findAll("", {"class":"sister"})
—–针对参数recursive——
-默认True,当等于False的时候,只查询文档的一级标签
—–针对参数limit——
+find()就是findAll()的limit参数等于1的时候


get_text(),清除标签,即获取标签里的文本信息

综合使用

上述三类方法是可以综合使用的,比如如果我想在爱丽丝文档中寻找id=”link1”的标签可以这样写:soup.findAll("p",{"class":"title"})[0].next_sibling.next_sibling.findAll(id="link1")

支持正则

由于正则可以讲的地方太多,有空再特别写一篇关于正则的总结吧


CSS选择器

同样基于爱丽丝文档
select("title")选择title标签,返回列表

select(".sister")选择class=”sister”的标签,返回列表

select("#link1")选择id=”link1”的标签,返回列表

select("head > title")选择head标签下的title标签,符号”>”左右两边一定要有空格

select("p #link2")选择p标签下符合id=link2的标签

soup.select('a[id="link3"]')选择a标签中id=link3的标签

Python爬虫-BeautifulSoup相关推荐

  1. python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...

    Python爬虫包 BeautifulSoup  递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...

  2. [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租

    我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示"当前访问疑似黑客攻击,已被网站管理员设置为拦截"提示,如下图所示.此时我 ...

  3. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

  4. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  5. python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践

    前言 前面安装了BeautifulSoup库,现在就来实现一下吧. 目录 一.Urllib库的使用 二.BeautifulSoup的使用 三. 一个示例 ----------------------- ...

  6. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 Python版本:3.6.4 相关模块: requests模块: bs4模块: wordcloud模块 ...

  7. [python爬虫] BeautifulSoup爬取+CSV存储贵州农产品数据

    在学习使用正则表达式.BeautifulSoup技术或Selenium技术爬取网络数据过程中,通常会将爬取的数据存储至TXT文件中,前面也讲述过海量数据存储至本地MySQL数据库中,这里主要补充Bea ...

  8. python爬虫beautifulsoup实例-Python爬虫学习(二)使用Beautiful Soup库

    (一)使用Beautiful Soup库(默认将HTML转换为utf-8编码) 1,安装Beautiful Soup库:pip install beautifulsoup4 2,简单使用: impor ...

  9. 数据之路 - Python爬虫 - BeautifulSoup库

    一.BeautifulSoup介绍 Beautiful Soup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据.Beautiful Soup自动将输入文档转换为Uni ...

最新文章

  1. U盘挂载,gedit,vi,文本模式中文乱码等等问题
  2. 美国《时代》周刊公布年度25大最佳发明名单
  3. SpringMVC 中整合JSON、XML视图一
  4. HDU2018题求母牛数量C++
  5. [BUUCTF-pwn]——ez_pz_hackover_2016
  6. html鼠标标控制,html 鼠标 css 控制
  7. scrapy设置代理的方法
  8. Sitemesh3的使用及配置
  9. python动态_python --动态类型
  10. MySQL的前缀索引及Oracle的类似实现
  11. 整理了近五年顶会都收录了哪些实体链接文章
  12. Web开发之旅--使用Flask 实现REST架构的API
  13. 三联图书馆系统管理服务器名,三联图书管理系统软件
  14. 《初等数论》:整除性概念及其性质、质数与合数
  15. u盘写保护无法格式化的修复
  16. 我曾经学习过的地方--中国欧盟可用性研究中心
  17. 元数据管理技术--Atlas
  18. 导航卫星系统实时可视化平台开发
  19. termux python_【小白教程】Termux实现安卓手机Python编程
  20. 爬取虎牙TV全站主播信息

热门文章

  1. char *const 和 const char *(char const*)
  2. 查看电脑支持最大内存和内存条型号
  3. 使用 Web3.js 进行 Matic 测试网上链操作
  4. Profibus DP-Slave in C
  5. inventor安装未完成,某些产品无法安装的解决方法
  6. javaSE<String和StringBuffer和StringBuider>day11
  7. 傅里叶变换、短时傅里叶变换、小波变换
  8. 广州Java工程师平均薪资_【广州恒生电子工资】java开发工程师待遇-看准网
  9. 20189200余超 2018-2019-2 移动平台应用开发实践第八周作业
  10. html —— table 标签 与 display:table 样式