发布时间:2024-03-13 09:30:02
本节通过编写一个简单的爬虫程序,进一步熟悉 lxml 解析库的使用。
标签中,而每一
标签又包含在
标签中,因此对于dd
标签而言,dl
标签是一个更大的节点,也就是它的父辈节点,如下所示:
标签内的影片信息提取完成时,您需要使用同样的 Xpath 表达式提取下一影片信息,直到所有影片信息提取完成,这种方法显然很繁琐。那么有没有更好的方法呢?
节点放入一个列表中,然后使用 for 循环的方式去遍历每一个节点对象,这样就大大提高了编码的效率。
节点的父节点
可以同时匹配 10 个
节点,并将这些节点对象放入列表中。我们把匹配 10个
节点的 Xpath 表达式称为“基准表达式”。如下所示:
xpath_bds='//dl[@class="board-wrapper"]/dd'下面通过基准表达式匹配
# 匹配10个dd节点对象 xpath_bds='//dl[@class="board-wrapper"]/dd' dd_list=parse_html.xpath(xpath_bds)输出结果:
[, , , , , , , , , ]
节点中,接下来开始分析9.3
提取电影名信息:xpath('.//p[@class="name"]/a/text()') 提取主演信息:xpath('.//p[@class="star"]/text()') 提取上映时间信息:xpath('.//p[@class="releasetime"]/text()')
# coding:utf8 import requests from lxml import etree from ua_info import ua_list import random class MaoyanSpider(object): def __init__(self): self.url='https://maoyan.com/board/4?offset=50' self.headers={'User-Agent':random.choice(ua_list)} def save_html(self): html=requests.get(url=self.url,headers=self.headers).text #jiexi parse_html=etree.HTML(html) # 基准 xpath 表达式,匹配10个
{'name': '飞屋环游记', 'star': '主演:爱德华·阿斯纳,乔丹·长井,鲍勃·彼德森', 'time': '上映时间:2009-08-04'} {'name': '窃听风暴', 'star': '主演:乌尔里希·穆埃,塞巴斯蒂安·科赫,马蒂娜·格德克', 'time': '上映时间:2006-03-23(德国)'} {'name': '美国往事', 'star': '主演:罗伯特·德尼罗,詹姆斯·伍兹,伊丽莎白·麦戈文', 'time': '上映时间:2015-04-23'} {'name': '乱世佳人', 'star': '主演:费雯·丽,克拉克·盖博,奥利维娅·德哈维兰', 'time': '上映时间:1939-12-15(美国)'} {'name': '大话西游之大圣娶亲', 'star': '主演:周星驰,朱茵,莫文蔚', 'time': '上映时间:2014-10-24'} {'name': '美丽心灵', 'star': '主演:罗素·克劳,詹妮弗·康纳利,艾德·哈里斯', 'time': '上映时间:2001-12-13(美国)'} {'name': '消失的爱人', 'star': '主演:本·阿弗莱克,裴淳华,尼尔·帕特里克·哈里斯', 'time': '上映时间:2014-09-26(美国)'} {'name': '罗马假日', 'star': '主演:格利高里·派克,奥黛丽·赫本,埃迪·艾伯特', 'time': '上映时间:1953-08-20(意大利)'} {'name': '一一', 'star': '主演:吴念真,金燕玲,李凯莉', 'time': '上映时间:2017-07-28(中国台湾)'} {'name': '蝴蝶效应', 'star': '主演:约翰·帕特里克·阿梅多利,罗根·勒曼,卡梅隆·布莱特', 'time': '上映时间:2004-01-23(美国)'}