之前我们用正则表达式 + requests 库 爬取猫眼电影 TOP 100,原文链接在这里:
https://blog.youkuaiyun.com/S1998F/article/details/97916617
但是正则表达式很复杂,也很难学,我们能不能不用正则表达式匹配想要的内容呢?答案是可以的,这次我们选用 XPath 来解析内容。
要获取的内容还是排名、电影海报、电影名称、演员和上映时间,只不过改变了解析方式,那么整个代码中只需要修改 parse_one_page(html) 函数即可。函数修改如下:
from lxml import etree
def parse_one_page(html) -> list:
xpath_obj = etree.HTML(html) # 构造一个 XPath 解析对象
index_list = xpath_obj.xpath('//dd/i/text()')
image_list = xpath_obj.xpath('//dd/a/img/@data-src')
name_list = xpath_obj.xpath('//dd/a/@title')
actor_list = xpath_obj.xpath('//dd/div/div/div/p[contains(@class, "star")]/text()')
time_list = xpath_obj.xpath('//dd/div/div/div/p[contains(@class, "releasetime")]/text()')
res = []
for i in range(10):
tmp = {
'index': index_list[i],
'image': image_list[i],
'name': name_list[i].strip(),
'actor': actor_list[i].strip(),
'time': time_list[i].strip(),
}
res.append(tmp)
return res
首先要构造一个 XPath 解析对象,然后对这个对象调用 XPath 语法进行解析,经过解析后会生成一个列表,我们把这些列表的内容按序构造成一个字典,使得输出时更加美观。XPath 语法如果不熟悉的话,可以 Google 一下,很容易,几分钟就能学会。
总结一下,利用 XPath 进行网页解析会比正则表达式更加简单。
ps.如果想要打开新世界的大门,可以扫描下方的二维码,关注微信公众号「SuperFeng」。