爬虫Beautiful Soup的CSS选择器
2019-01-13 10:55
831 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/86409868
一 点睛
Beautiful Soup还提供了另外一种选择器,那就是CSS选择器。如果对Web开发熟悉的话,那么对CSS选择器肯定也不陌生。如果不熟悉的话,可以参考http://www.w3school.com.cn/cssref/css_selectors.asp了解。
使用CSS选择器时,只需要调用select()方法,传入相应的CSS选择器即可。
二 基础用法
1 代码
[code]html=''' <div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="panel-body"> <ul class="list" id="list-1"> <li class="element">Foo</li> <li class="element">Bar</li> <li class="element">Jay</li> </ul> <ul class="list list-small" id="list-2"> <li class="element">Foo</li> <li class="element">Bar</li> </ul> </div> </div> ''' from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.select('.panel .panel-heading')) print(soup.select('ul li')) print(soup.select('#list-2 .element')) print(type(soup.select('ul')[0]))
2 结果
[code]E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_2.py [<div class="panel-heading"> <h4>Hello</h4> </div>] [<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>, <li class="element">Foo</li>, <li class="element">Bar</li>] [<li class="element">Foo</li>, <li class="element">Bar</li>] <class 'bs4.element.Tag'>
3 说明
这里我们用了3次CSS选择器,返回的结果均是符合CSS选择器的节点组成的列表。例如,select('ul li')则是选择所有ul节点下面的所有li节点,结果便是所有的li节点组成的列表。
最后一句打印输出了列表中元素的类型。可以看到,类型依然是Tag类型。
三 嵌套选择
1 代码
[code]html=''' <div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="panel-body"> <ul class="list" id="list-1"> <li class="element">Foo</li> <li class="element">Bar</li> <li class="element">Jay</li> </ul> <ul class="list list-small" id="list-2"> <li class="element">Foo</li> <li class="element">Bar</li> </ul> </div> </div> ''' from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') # select()方法同样支持嵌套选择。例如,先选择所有ul节点,再遍历每个ul节点,选择其li节点 for ul in soup.select('ul'): print(ul.select('li'))
2 结果
[code]E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_2.py [<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>] [<li class="element">Foo</li>, <li class="element">Bar</li>]
3 说明
可以看到,这里正常输出了所有ul节点下所有li节点组成的列表。
四 获取属性
1 代码
[code]html=''' <div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="panel-body"> <ul class="list" id="list-1"> <li class="element">Foo</li> <li class="element">Bar</li> <li class="element">Jay</li> </ul> <ul class="list list-small" id="list-2"> <li class="element">Foo</li> <li class="element">Bar</li> </ul> </div> </div> ''' from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') # 尝试获取每个ul节点的id属性 for ul in soup.select('ul'): print(ul['id']) print(ul.attrs['id'])
2 结果
[code]E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_2.py list-1 list-1 list-2 list-2
3 说明
可以看到,直接传入中括号和属性名,以及通过attrs属性获取属性值,都可以成功。
五 获取文本
1 代码
[code]html=''' <div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="panel-body"> <ul class="list" id="list-1"> <li class="element">Foo</li> <li class="element">Bar</li> <li class="element">Jay</li> </ul> <ul class="list list-small" id="list-2"> <li class="element">Foo</li> <li class="element">Bar</li> </ul> </div> </div> ''' from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') # 用string属性和get_text()获得结果一样 for li in soup.select('li'): print('Get Text:', li.get_text()) print('String:', li.string)
2 结果
[code]E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_2.py Get Text: Foo String: Foo Get Text: Bar String: Bar Get Text: Jay String: Jay Get Text: Foo String: Foo Get Text: Bar String: Bar
相关文章推荐
- 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
- python 爬虫5 Beautiful Soup的用法
- Scrapy爬虫系列笔记之五:静态无验证网站的爬取以及xpath和css选择器_by_书訢
- Python爬虫入门(8):Beautiful Soup的用法
- python 网络爬虫 Beautiful Soup用法
- 基于Beautiful Soup 4.2.0文档的学习记录(2)——CSS选择器
- 【Python网络爬虫开发教程】Beautiful Soup 4.2.0 文档
- 运维学python之爬虫工具篇(二)Beautiful Soup的用法
- Python爬虫 - Beautiful Soup4(一)-本地文件爬取
- Beautiful Soup 解决爬虫编码格式问题,Beautiful Soup编码格式
- Python爬虫 - Beautiful Soup4(二)-网络文件爬取
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
- 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
- Python爬虫利器Beautiful Soup的用法
- Python爬虫实战一之使用Beautiful Soup抓取‘谣言百科’的分类内容
- 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
- python爬虫之Beautiful Soup
- Python3爬虫学习之爬虫利器Beautiful Soup用法分析
- Python爬虫(4):Beautiful Soup的常用方法
- 爬虫------Beautiful Soup与json的转化