XPath
XPath(XML Path)是一种查询语言,它能在XML和HTML的树状结构中寻找结点。形象一点来说,XPath就是一种根据“地址”来“找人”的语言。(使用C语言开发)
为什么要用XPath
用正则表达式来提取信息,针对给定较短的文本比较容易且适宜,但是一旦内容多起来,正则的效率会大大降低,不仅需要构造正则表达式,还需要分析内容结构,寻找的内容越复杂,构造正则表达式所需要花费的时间也就越多。
而XPath却不一样,我们主要从网页爬取数据,而XPath针对的就是HTML,所以用XPath从HTML源代码中提取信息可以大大提高效率。
安装库
xlml库
pip install lxml
parsel 库
pip install parsel
对比
-
lxml
:它是一个功能强大的用于处理XML和HTML的库,在Python中使用广泛。它提供了一个快速而易于使用的API,用于处理XML和HTML数据。当使用etree.HTML(html)
创建的是一个HTML树,可以使用XPath或CSS选择器从HTML树中提取数据。 -
parsel
:它是一个库,提供了一个简单的API,使用XPath或CSS选择器从HTML和XML中提取数据。当使用parsel.Selector(html)
时,即创建了一个Selector
对象,可以直接从HTML内容中使用XPath或CSS选择器提取数据。
总结
lxml
和parsel
都可以用于网页抓取,但它们有不同的API和功能,用于从HTML中提取数据。lxml
是一个更通用的XML/HTML处理库,而parsel
专门用于使用选择器提取数据。
语法
细节较多,可以参考菜鸟教程的XPath教程
注意“//”与“/”的区别
“/”是从<html>根标签查找,开头一定是html标签,即 /html/body/...
“//”是从全文查找,开头不一定是html标签
案例
from lxml import etree
import requests
html = requests.get("http://exercise.kingname.info/exercise_bs_1.html").content.decode()
selector = etree.HTML(html)
content = seletor.xpath('//div[@class="useful u"]/ul/li/text()')
for item in content:
print(item)
import parsel
selector = parsel.Selector(html)
结果
BeautifulSoup4
简介
Beautiful Soup4(BS4)是Python的一个第三方库,用来从HTML和XML中提取数据。
Beautiful Soup4在某些方面比XPath易懂,但是不如XPath简洁,而且由于它是使用Python开发的,因此速度比XPath慢。
安装
pip install beautifulsoup4
语法
使用Beautiful Soup4提取HTML内容,一般要经过以下两步。
处理源代码生成BeautifulSoup对象。
使用find_all()或者find()来查找内容。
具体语法:Beautiful Soup 教程 (w3schools.cn) 或Beautiful Soup 4.2.0 文档 — Beautiful Soup 4.2.0 documentation (crummy.com)
案例
from bs4 import BeautifulSoup
import requests
html = requests.get("http://exercise.kingname.info/exercise_bs_1.html").content.decode()
soup = BeautifulSoup(html, 'lxml')
info = soup.find(class_='test')
print('使用find方法,返回的对象类型为'.format(type(info)) )
print(info.string)
结果
网页源代码
<html>
<head>
<title>测试</title>
</head>
<body>
<div class="useful">
<ul>
<li class="info">我需要的信息1</li>
<li class="test">我需要的信息2</li>
<li class="iamstrange">我需要的信息3</li>
</ul>
</div>
<div class="useless">
<ul>
<li class="info">垃圾1</li>
<li class="info">垃圾2</li>
</ul>
</div>
</body>
</html>
通过以上工具对内容进行过滤后,即可将想要的数据保存在文件或数据库中,进行可视化或其他操作
保存到文件可以参考python读写文件操作-优快云博客