失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 网络爬虫CSS选择器详细讲解

网络爬虫CSS选择器详细讲解

时间:2020-07-20 22:10:03

相关推荐

网络爬虫CSS选择器详细讲解

网络爬虫CSS选择器详细讲解

前言使用步骤1.解析的HTML代码2.逐层选择节点3.获取文本(string和get_text())4.获取节点的属性值5.选择单个和多个节点6.通过class和id选择节点(.class #id):7.选择属性值有多个值的节点(:8.选择指定的多个节点:9.选择包含属性的节点:10.根据属性值选择节点:11.嵌套选择: 更多关于CSS选择器用法请参照该链接:/cssref/css_selectors.asp 网络爬虫速查表(多种选择器语法、request常用语法速查表下载):[/qq_3065/article/details/123338900?spm=1001..3001.5501](/qq_3065/article/details/123338900?spm=1001..3001.5501)

前言

Python拥有大量的解析库,比较常用的有Beautiful Soup、pyquery、parsel等,而它们共同特点是:大部分都支持CSS选择器,所以学会了CSS选择器的用法,就能快速利用各种解析方式提取数据,下面将介绍基于bs4解析库的CSS的常用方法。

使用步骤

1.解析的HTML代码

代码如下(示例):

html ="""<html><head><title>フィロソフィー</title></head><body><p class="philosophy"><a href="/qq_3065?type=blog" class='marx' id="1">フィロソフィー的个人博客</a></p><p class="C-1 C-2">多个class值的节点</p><p class="C-1">通过.class选择节点</p><p class="p-1"></p><p class="p-2" value="marx"></p><h1><a id="D1">通过#id选择节点</a></h1></body></html>"""from bs4 import BeautifulSoup #导入bs4库soup = BeautifulSoup(html,features='lxml') #选择lxml解析器

2.逐层选择节点

逐层获取的节点:

print(soup.select('html head title')) #打印逐层获取的title节点print(soup.select('.philosophy a'))

输出:

[<title>フィロソフィー</title>][<a class="marx" href="/qq_3065?type=blog" id="1">フィロソフィー的个人博客</a>]

3.获取文本(string和get_text())

打印节点内的文本(两种方式):

print(soup.select('html head title')[0].string) #返回节点文本内容print(soup.select('.philosophy a')[0].get_text()) #返回节点文本内容

输出:

フィロソフィーフィロソフィー的个人博客

4.获取节点的属性值

print(soup.select('p')[0]['class']) #获取第一个p节点的class属性值print(soup.select('p a')[0]['href']) #获取第一个p节点下的a节点的href属性值

输出:

['philosophy']/qq_3065?type=blog

5.选择单个和多个节点

print(soup.select('p')) #选择所有的p节点,返回多个p节点的列表print(soup.select('p')[1:]) #选择第二个p节点及后面的p节点print(soup.select('p')[4]) #使用索引选择第五个p节点,返回单个节点

输出:

[<p class="philosophy"><a class="marx" href="/qq_3065?type=blog" id="1">フィロソフィー的个人博客</a></p>, <p class="C-1 C-2">多个属性值的节点</p>, <p class="C-1">通过.class选择节点</p>, <p class="p-1"></p>, <p class="p-2" value="marx"></p>][<p class="C-1 C-2">多个属性值的节点</p>,<p class="C-1">通过.class选择节点</p>,<p class="p-1"></p>,<p class="p-2" value="marx"></p>]<p class="p-2" value="marx"></p>

6.通过class和id选择节点(.class #id):

通过class属性和id属性选择:

print(soup.select('.C-1')) #选择class="C-1"节点print(soup.select('h1 #D1')) #选择h1节点下的id="D1"的节点

输出:

[<p class="C-1 C-2">多个属性值的节点</p>, <p class="C-1">通过.class选择节点</p>][<a id="D1">通过#id选择节点</a>]

7.选择属性值有多个值的节点(:

选择class属性值为C-1和C-2的节点:

print(soup.select('.C-1.C-2'))

输出:

[<p class="C-1 C-2">多个class值的节点</p>]

8.选择指定的多个节点:

选择class="p-1"的节点和class="p-2"的节点:

print(soup.select('.p-1,.p-2')) #返回包含指定的两个节点的列表

输出:

[<p class="p-1"></p>, <p class="p-2" value="marx"></p>]

9.选择包含属性的节点:

选择class=“philosopy“的节点下 包含href属性的节点

soup.select('.philosophy a[href]')

输出:

[<a class="marx" href="/qq_3065?type=blog" id="1">フィロソフィー的个人博客</a>]

10.根据属性值选择节点:

选择value=“marx”的 节点

soup.select('p[value="marx"]')

输出:

[<p class="p-2" value="marx"></p>]

11.嵌套选择:

select支持嵌套选择节点

for p in soup.select('p'):print(p.select('a'))

输出:

[<a class="marx" href="/qq_3065?type=blog" id="1">フィロソフィー的个人博客</a>][][][][]

更多关于CSS选择器用法请参照该链接:

/cssref/css_selectors.asp

网络爬虫速查表(多种选择器语法、request常用语法速查表下载):/qq_3065/article/details/123338900?spm=1001..3001.5501

如果觉得《网络爬虫CSS选择器详细讲解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。