学习了正则和bs4,到了xpath,xpath是这三个里面最重要的(我也不知道为啥,视频里的老师说的!)xpath是最常用且最高效便捷的一种解析方式。
学习完了xpath后开始总结:
xpath解析原理:
1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
环境的安装也很简单,在终端输入pip install lxml,在使用时输入from lxml import etree.
然后在使用的时候实例化一个对象即可。
为了防止由html格式不规范而导致的乱码,按照下面的方法来写。
parser = etree.HTMLParser(encoding='utf-8')
r = etree.parse('xxx.html', parser=parser)
基本就这些,然后做一个实战,需求是爬取58同城上的第一页中所有二手房的名称。
import requests
from lxml import etree
if __name__ == '__main__':
url = "https://wx.58.com/ershoufang/?utm_source=market"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
}
page_text = requests.get(url=url, headers=headers).text
# 在本地创建一个html的文件,将页面数据写入
with open("58.html", "w", encoding="utf-8") as fp:
fp.write(page_text)
# 创建实例
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse("58.html", parser=parser)
# 每一个商品详细信息都在一个section标签下,逐个遍历
for house in tree.xpath("//section[@class='list']"):
# 再定位到每个section下的房源名称,将文本打印出来
titles = house.xpath("//div[@class='property-content-title']/h3/@title")
for title in titles:
print(title)
结果展示:
关于属性定位和标签定位的知识点放在后面的总结中。