Scrapy作为一个爬虫开发框架提供了内置的Selector组件来处理html文档,然而他的语法实在是有点诡异,大约平日前端开发用惯了JQuery的缘故吧,总想找一款具有类似语法的python组件来帮助处理html文档。
技术选型
稍微google下(感谢搜索引擎赐予我的力量。。),就找到了两款类似功能的组件:
PyQuery:
https://pythonhosted.org/pyquery/index.html#full-documentation
BeautifulSoup 4
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#
选择哪个呢?
- 首先看一下文档功能吧
对于pyuery,截图中可以看出它实现了类似JQuery的css选择器语法,满足要求。同时文档目录还显示,它除了支持css选择器外,还可以操作dom,可以进行ajax操作。先不管细节,至少看上去是满足要求的。
![pyquery.png][1]
对于BeautifulSoup,很明显他也满足我们的基本要求。支持css选择器。
![BeautifulSoup4.png][2]
-
成熟度
PyQuery当前版本1.2.4,而BeautifulSoup已经是第四版本了。BeautifulSoup 4要成熟些。 -
文档
PyQuery也不知道是功能有限的缘故,还是文档做的不好的缘故,文档内容页少的可怜。而BeautifulSoup 4文档蛮多,大概看了眼觉得写得蛮详细。此外,BeautifulSoup 4还有中文文档,对那些鸟语不行的朋友可能很有帮助。
所以,这里技术选型我就直接选择BeautifulSoup 4了。
BeautifulSoup 4简单功能
-
先下载一个网页的html代码回来存成文件, 比如embed_code.html。
我这里就不给出具体html文档了,随便找一个都可以的 -
处理html文档,第一步必然是创建一个BeautifulSoup对象
from bs4 import BeautifulSoup
读取文件中的html代码
html = ""
with open('embed_code.html', 'r', encoding='UTF-8') as content_file:
html = content_file.read()
创建soup对象
soup = BeautifulSoup(html, 'html.parser')
2. 利用soup对象执行各种操作
取出所有class是commentMessage的dom元素
elements = soup.select(".commentMessage")
for element in elements:
print(element.span.get_text()) # 打印每一个commentMessage中span元素里的文本
[1]: http://blog.shyclouds.net/usr/uploads/2018/08/3776371987.png
[2]: http://blog.shyclouds.net/usr/uploads/2018/08/778076310.png