建设银行租房网站湖北破解wordpress加密文章
建设银行租房网站湖北,破解wordpress加密文章,wordpress5.6,天眼企业查询系统python爬虫8#xff1a;bs4库 前言 python实现网络爬虫非常简单#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点#xff0c;方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论#xff0c;并不会对网站产生不好…python爬虫8bs4库 前言 python实现网络爬虫非常简单只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论并不会对网站产生不好影响。 目录结构 文章目录 python爬虫8bs4库1. 概述与安装2. 解析器3. 方法讲解3.1 第一个例子3.2 初始化3.3 通过标签名来获取元素3.4 通过属性来获取元素3.5 通过find方法来获取元素常用3.6 通过css语法获取元素3.7 获取信息 4. 总结 1. 概述与安装
bs4是BeautifulSoup4的简称它是一个可以从HTML中提取数据的Python第三方库也是我们将要讲解的第二个解析库除此之外还有常用的pyquery主要通过css语法来获取我们不讲解因为需要学习过前端的css、re正则表达式库基础库但是用于爬虫里比较麻烦因此也不讲解。
其安装非常简单
pip install Beautifulsoup42. 解析器
对于bs4这个库来说我们主要使用的是BeautifulSoup对象使用方法如下
# 导包
from bs4 import BeautifulSoup
# 创建对象
soup BeautifulSoup()
print(type(soup))# 结果为
# class bs4.BeautifulSoup 而BeautifulSoup在解析网页的时候依赖于其他的解析器如我们之前讲解过的lxml等等。下面给出常见的四种解析器Python标准库、lxml解析器、xml解析器、html5lib解析器。上面四种解析器各有优点也有缺点其中最常用的就是lxml因为其解析速度和容错性都比较好。
下面给出四种解析器的优缺点
解析器优点缺点Python标准库python内置标准库执行速度适中文档容错强python2.x与python3.2.2之前的版本容错能力差lxml速度快、容错能力强需要安装C语言库xml速度快唯一支持XML文档的解析器需要安装C语言库html5lib最好的容错性速度慢 什么是容错性 这里解释一下什么是容错性。我们有时候传给BeautifulSoup的网页源代码并不完整或者说格式不标准其中常见的如table标签的写法table标签现在一般都采取的简写的方式而不是标准的写法。这时不同的解析器就有不同的容错性或者说对于修正性。
3. 方法讲解
3.1 第一个例子
下面给出bs4的一个小小例子让大家有一个印象
from bs4 import BeautifulSouptext
div classclassify clearfixa href/4kfengjing/ title4K风景图片4K风景/aa href/4kmeinv/ title4K美女图片4K美女/aa href/4kyouxi/ title4K游戏图片4K游戏/aa href/4kdongman/ classcurr title4K动漫图片4K动漫/aa href/4kyingshi/ title4K影视图片4K影视/aa href/4kmingxing/ title4K明星图片4K明星/aa href/4kqiche/ title4K汽车图片4K汽车/aa href/4kdongwu/ title4K动物图片4K动物/aa href/4krenwu/ title4K人物图片4K人物/aa href/4kmeishi/ title4K美食图片4K美食/aa href/4kzongjiao/ title4K宗教图片4K宗教/aa href/4kbeijing/ title4K背景图片4K背景/a
/divsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 提取出 所有类名
tag_list soup.find_all(a)
for tag in tag_list:print(tag.text) 结果为
4K风景
4K美女
4K游戏
4K动漫
4K影视
4K明星
4K汽车
4K动物
4K人物
4K美食
4K宗教
4K背景3.2 初始化
跟lxml一样第一个步骤仍然是初始化这个步骤是固定的就不多说了代码如下
from bs4 import BeautifulSoup
soup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# text为html源码字符串格式3.3 通过标签名来获取元素
第一个选择元素的方法如下示例
from bs4 import BeautifulSouptext
div classclassify clearfixa href/4kfengjing/ title4K风景图片4K风景/aa href/4kmeinv/ title4K美女图片4K美女/aa href/4kyouxi/ title4K游戏图片4K游戏/aa href/4kdongman/ classcurr title4K动漫图片4K动漫/aa href/4kyingshi/ title4K影视图片4K影视/aa href/4kmingxing/ title4K明星图片4K明星/aa href/4kqiche/ title4K汽车图片4K汽车/aa href/4kdongwu/ title4K动物图片4K动物/aa href/4krenwu/ title4K人物图片4K人物/aa href/4kmeishi/ title4K美食图片4K美食/aa href/4kzongjiao/ title4K宗教图片4K宗教/aa href/4kbeijing/ title4K背景图片4K背景/a
/divsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 方法一
result soup.div
print(type(result))
print(-*50)
print(result) 结果如下
class bs4.element.Tag
--------------------------------------------------
div classclassify clearfix
a href/4kfengjing/ title4K风景图片4K风景/a
a href/4kmeinv/ title4K美女图片4K美女/a
a href/4kyouxi/ title4K游戏图片4K游戏/a
a classcurr href/4kdongman/ title4K动漫图片4K动漫/a
a href/4kyingshi/ title4K影视图片4K影视/a
a href/4kmingxing/ title4K明星图片4K明星/a
a href/4kqiche/ title4K汽车图片4K汽车/a
a href/4kdongwu/ title4K动物图片4K动物/a
a href/4krenwu/ title4K人物图片4K人物/a
a href/4kmeishi/ title4K美食图片4K美食/a
a href/4kzongjiao/ title4K宗教图片4K宗教/a
a href/4kbeijing/ title4K背景图片4K背景/a
/div 可见这种方法的语法形式为 xxx.Tag_name。这种选择还支持嵌套选择如下
# 为了大家方便省略了相同的代码下面只给出需要修改的代码
# 修改之前result soup.div
# 修改之后
result soup.div.a 结果为
class bs4.element.Tag
--------------------------------------------------
a href/4kfengjing/ title4K风景图片4K风景/a 可见当有多个符合条件的标签时选择第一个符合的标签。
缺点选择性很低无法增加附加条件进行更深层次的筛选。
小小的总结一下
1. xxx.Tag_name
2. 当有多个符合条件的标签时选择第一个符合的标签。3.4 通过属性来获取元素
主要依靠一些属性来获取如contents、children、descendants等等。下面一一讲解其作用 子节点 属性 contents、children
作用 获取目标的直接子节点
注意contents返回的是列表而children返回的是生成器。
比如
from bs4 import BeautifulSouptext
div classclassify clearfixa href/4kfengjing/ title4K风景图片4K风景/aa href/4kmeinv/ title4K美女图片4K美女/aa href/4kyouxi/ title4K游戏图片4K游戏/aa href/4kdongman/ classcurr title4K动漫图片4K动漫/aa href/4kyingshi/ title4K影视图片4K影视/aa href/4kmingxing/ title4K明星图片4K明星/aa href/4kqiche/ title4K汽车图片4K汽车/aa href/4kdongwu/ title4K动物图片4K动物/aa href/4krenwu/ title4K人物图片4K人物/aa href/4kmeishi/ title4K美食图片4K美食/aa href/4kzongjiao/ title4K宗教图片4K宗教/aa href/4kbeijing/ title4K背景图片4K背景/a
/divsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦# 方法二
print(type(soup.div.contents))
for child in soup.div.contents:print(child) 结果为
class list
a href/4kfengjing/ title4K风景图片4K风景/a
a href/4kmeinv/ title4K美女图片4K美女/a
a href/4kyouxi/ title4K游戏图片4K游戏/a
a classcurr href/4kdongman/ title4K动漫图片4K动漫/a
a href/4kyingshi/ title4K影视图片4K影视/a
a href/4kmingxing/ title4K明星图片4K明星/a
a href/4kqiche/ title4K汽车图片4K汽车/a
a href/4kdongwu/ title4K动物图片4K动物/a
a href/4krenwu/ title4K人物图片4K人物/a
a href/4kmeishi/ title4K美食图片4K美食/a
a href/4kzongjiao/ title4K宗教图片4K宗教/a
a href/4kbeijing/ title4K背景图片4K背景/a子孙节点 属性 descendants
作用 获取目标的所有子孙元素
返回值 生成器
比如
from bs4 import BeautifulSoup
text
ul classclearfixlia href/tupian/26783.html target_blankimg src/uploads/allimg/210122/210154-16113205145cce.jpg alt动漫女孩 黑发 露肩 4k壁纸3840x2160 /b动漫女孩 黑发 露肩 4k壁/b/a/lilia href/tupian/26780.html target_blankimg src/uploads/allimg/210122/195550-1611316550c9d7.jpg alt古风 美少女 伞 长发 女孩大长腿4k唯美动漫壁纸 /b古风 美少女 伞 长发 女/b/a/lilia href/tupian/24695.html target_blankimg src/uploads/allimg/190824/212516-1566653116f355.jpg alt下午 趴在桌子的女孩4k动漫壁纸3840x2160 /b下午 趴在桌子的女孩4k动/b/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦# 方法二
print(type(soup.ul.descendants))
for child in soup.ul.descendants:print(child) 结果
class generator# 显示其中一个结果
# 从下面可以看出一一获取里面所有的值li
a href/tupian/26783.html target_blank
img alt动漫女孩 黑发 露肩 4k壁纸3840x2160 src/uploads/allimg/210122/210154-16113205145cce.jpg/
b动漫女孩 黑发 露肩 4k壁/b
/a
/lia href/tupian/26783.html target_blank
img alt动漫女孩 黑发 露肩 4k壁纸3840x2160 src/uploads/allimg/210122/210154-16113205145cce.jpg/
b动漫女孩 黑发 露肩 4k壁/b
/aimg alt动漫女孩 黑发 露肩 4k壁纸3840x2160 src/uploads/allimg/210122/210154-16113205145cce.jpg/b动漫女孩 黑发 露肩 4k壁/b
动漫女孩 黑发 露肩 4k壁父节点 属性 parent
作用 获取目标节点的父节点 祖先节点 属性 parents
作用 获取目标节点的所有祖先节点
返回值 生成器 兄弟节点 属性1 next_sibling
作用 获取下一个兄弟节点
属性2 previous_sibling
作用 获取上一个兄弟节点
属性3 next_siblings
作用 获取下面的所有兄弟节点
属性4 previous_siblings
作用 获取之前的所有兄弟节点
3.5 通过find方法来获取元素常用 find_all()方法 作用 查询出所有符合条件的元素
常用参数 name、attrs、text
参数讲解
name 想要获取的节点的节点名字attrs 想要获取的节点的属性根据这个属性来筛选接收字典text 可以指定正则表达式或者字符串去匹配元素的内容
示例一name 和 attrs 的配合使用
from bs4 import BeautifulSoup
text
ul classclearfixlia classhello href/tupian/26783.html target_blank你好/aa classwhite href/tupian/26783.html target_blank白菜/aa classwhite href/tupian/26783.html target_blank白菜/aa classwhite href/tupian/26783.html target_blank白菜/aa classwhite href/tupian/26783.html target_blank白菜/aa classblack href/tupian/26783.html target_blank黑彩/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 筛选出白菜
result_list soup.find_all(a,attrs{class:white})
print(type(result_list))
print(-*50)
for result in result_list:print(result) 结果
class bs4.element.ResultSet
--------------------------------------------------
a classwhite href/tupian/26783.html target_blank白菜/a
a classwhite href/tupian/26783.html target_blank白菜/a
a classwhite href/tupian/26783.html target_blank白菜/a
a classwhite href/tupian/26783.html target_blank白菜/a 示例二 text的使用
import re
from bs4 import BeautifulSoup
text
ul classclearfixlia classhello href/tupian/26783.html target_blank你好/aa classwhite href/tupian/26783.html target_blank白菜,你好我是黑菜/aa classwhite href/tupian/26783.html target_blank白菜你好你好/aa classwhite href/tupian/26783.html target_blank我是一个小白菜/aa classwhite href/tupian/26783.html target_blank大白菜/aa classblack href/tupian/26783.html target_blank黑彩/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 筛选出白菜
result_list soup.find_all(textre.compile(r白菜))
for result in result_list:print(result) 结果为
白菜,你好我是黑菜
白菜你好你好
我是一个小白菜
大白菜find()方法: 作用 返回第一个匹配成功的元素 find_parents()和find_parent(): find_parents():返回所有的祖先节点
find_parent():返回直接父节点 find_next_siblings()和find_next_sibling(): find_next_siblings(): 返回后面所有的兄弟节点
find_next_sibling(): 返回下一个兄弟节点 find_previous_siblings()和find_previous_sibling(): find_previous_siblings() 返回之前的所有的兄弟节点
find_previous_sibling() 返回上一个兄弟节点
3.6 通过css语法获取元素
如果你学过css那么你也可以采取css来写不过我建议你选择pyquery模块来写css因为pyquery专门使用css来解析网页。
写法
xxx.select(css代码 ) 作用
返回所有符合css条件的元素 示例
from bs4 import BeautifulSoup
text
ul classclearfixlia classhello href/tupian/26783.html target_blank你好/aa classwhite href/tupian/26783.html target_blank白菜,你好我是黑菜/aa classwhite href/tupian/26783.html target_blank白菜你好你好/aa classwhite href/tupian/26783.html target_blank我是一个小白菜/aa classwhite href/tupian/26783.html target_blank大白菜/aa classblack href/tupian/26783.html target_blank黑彩/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 筛选出白菜
result_list soup.select(.white)
for result in result_list:print(result) 结果如下
a classwhite href/tupian/26783.html target_blank白菜,你好我是黑菜/a
a classwhite href/tupian/26783.html target_blank白菜你好你好/a
a classwhite href/tupian/26783.html target_blank我是一个小白菜/a
a classwhite href/tupian/26783.html target_blank大白菜/a3.7 获取信息
元素筛选成功后我们需要获取元素的一定信息如文本信息、属性信息等等。 获取文本信息 xxx.string用来获取目标路径下第一个非标签字符串得到的是个字符串xxx.stings:用来获取目标路径下所有的子孙非标签字符串返回的是个生成器xxx.stripped_strings用来获取目标路径下所有的子孙非标签字符串会自动去掉空白字符串返回的是一个生成器xxx.get_text()用来获取目标路径下的子孙字符串返回的是字符串包含HTML的格式内容 示例
from bs4 import BeautifulSoup
text
ul classclearfixlia classhello href/tupian/26783.html target_blank你好/aa classwhite href/tupian/26783.html target_blank白菜,你好我是黑菜/aa classwhite href/tupian/26783.html target_blank白菜你好你好/aa classwhite href/tupian/26783.html target_blank我是一个小白菜/aa classwhite href/tupian/26783.html target_blank大白菜/aa classblack href/tupian/26783.html target_blank黑彩/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 筛选出白菜
tag soup.find(li)
print(tag.string)
print(list(tag.strings))
print(list(tag.stripped_strings))
print(tag.get_text()) 结果如下
None
[\n, 你好, \n, 白菜,你好我是黑菜, \n, 白菜你好你好, \n, 我是一个小白菜, \n, 大白菜, \n, 黑彩, \n]
[你好, 白菜,你好我是黑菜, 白菜你好你好, 我是一个小白菜, 大白菜, 黑彩]你好
白菜,你好我是黑菜
白菜你好你好
我是一个小白菜
大白菜
黑彩获取属性信息 xxx.attrs[属性名字]xxx[属性名字] 示例
from bs4 import BeautifulSoup
text
ul classclearfixlia classhello href/tupian/26783.html target_blank你好/aa classwhite href/tupian/26783.html target_blank白菜,你好我是黑菜/aa classwhite href/tupian/26783.html target_blank白菜你好你好/aa classwhite href/tupian/26783.html target_blank我是一个小白菜/aa classwhite href/tupian/26783.html target_blank大白菜/aa classblack href/tupian/26783.html target_blank黑彩/a/li
/ulsoup BeautifulSoup(text,lxml) # 需要安装lxml库哦
# 筛选出白菜
tag_list soup.find_all(a)
tag_attr_list_one [tag.attrs[class] for tag in tag_list]
tag_attr_list_two [tag[class] for tag in tag_list]
print(tag_attr_list_one)
print(-*50)
print(tag_attr_list_two) 结果
[[hello], [white], [white], [white], [white], [black]]
--------------------------------------------------
[[hello], [white], [white], [white], [white], [black]]4. 总结
本篇讲解了第二个解析库bs4当然其实大家不需要了解那么多的解析库会一两个即可因此本系列也只讲解lxml、bs4这两个用到最多的解析库其他的比如pyquery、re都可以自己去学习。
下一篇会将之前的小说实战重新采用bs4来解析。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89149.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!