Python lxml解析库实战应用
下面使用 lxml 库抓取猫眼电影 Top100 榜(点击访问),编写程序的过程中,注意与《Python爬虫抓取猫眼电影排行榜》中使用的正则解析方式对比,这样您会发现 lxml 解析库是如此的方便。
确定信息元素结构
首先明确要抓取信息的网页元素结构,比如电影名称、主演演员、上映时间。通过简单分析可以得知,每一部影片的信息都包含在<dd>标签中,而每一<dd>标签又包含在<dl>标签中,因此对于dd标签而言,dl标签是一个更大的节点,也就是它的父辈节点,如下所示:
<dd>标签内的影片信息提取完成时,您需要使用同样的 Xpath 表达式提取下一影片信息,直到所有影片信息提取完成,这种方法显然很繁琐。那么有没有更好的方法呢?基准表达式
因为每一个节点对象都使用相同 Xpath 表达式去匹配信息,所以很容易想到 for 循环。我们将 10 个<dd>节点放入一个列表中,然后使用 for 循环的方式去遍历每一个节点对象,这样就大大提高了编码的效率。通过
<dd>节点的父节点<dl>可以同时匹配 10 个<dd>节点,并将这些节点对象放入列表中。我们把匹配 10个<dd>节点的 Xpath 表达式称为“基准表达式”。如下所示:下面通过基准表达式匹配 <dd> 节点对象,代码如下:xpath_bds='//dl[@class="board-wrapper"]/dd'
# 匹配10个dd节点对象
xpath_bds='//dl[@class="board-wrapper"]/dd'
dd_list=parse_html.xpath(xpath_bds)
输出结果:
[<Element dd at 0x36c7f80>, <Element dd at 0x36c7d50>, <Element dd at 0x36c7940>, <Element dd at 0x36c7d28>, <Element dd at 0x36c7bc0>, <Element dd at 0x36c7f58>, <Element dd at 0x36c7f30>, <Element dd at 0x36cc468>, <Element dd at 0x36cc170>, <Element dd at 0x37382b0>]
提取数据表达式
因为我们想要抓取的信息都包含在<dd>节点中,接下来开始分析<dd>节点包含的 HTML 代码,下面随意选取的一段<dd>节点包含的影片信息,如下所示:<dd>
<i class="board-index board-index-4">4</i>
<a href="/films/1292" title="海上钢琴师" class="image-link" data-act="boarditem-click" data-val="{movieId:1292}">
<img src="//slus.meituan网站站点" rel="nofollow" />
提取电影名信息:xpath('.//p[@class="name"]/a/text()')
提取主演信息:xpath('.//p[@class="star"]/text()')
提取上映时间信息:xpath('.//p[@class="releasetime"]/text()')
完整程序代码
上述内容介绍了编写程序时用到的 Xpath 表达式,下面正式编写爬虫程序,代码如下所示:
# 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://maoya网站站点" rel="nofollow" />
{'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(美国)'}
- 随机文章
- 中国 直飞 马尔代夫(直飞!马尔代夫暖冬游。)
- 沙巴 马尔代夫 新加坡(沙巴、马尔代夫、新加坡:三地旅游攻略汇总)
- 中国舟山马尔代夫(中国舟山:打造马尔代夫的海上后花园)
- 云南马尔代夫头像(云南旅游新亮点:仿马代头像吸睛无数)
- 孟津马尔代夫地址(孟津旅游者的天堂:马尔代夫度假胜地)
- 描述马尔代夫句子(如何体验马尔代夫度假的五大绝佳方式)
- 南宁马尔代夫水库(南宁水库被称为中国“马尔代夫水库”)
- 亨通 马尔代夫(亨通控股成立马尔代夫公司)
- 海南马尔代夫美景(探寻海南独特美景,仿若置身马尔代夫)
- 安娜塔拉马尔代夫(安娜塔拉马尔代夫:从海滩到鲸鲨之旅)
- 海边马尔代夫平潭(美妙的度假胜地:平潭海边的马尔代夫)
- 最美马尔代夫海岛(探秘马尔代夫最美海岛,如入画中世界)
- 梦楠 马尔代夫(梦想成真!梦楠游览美丽的马尔代夫)
- 转瞬即逝马尔代夫(马尔代夫——飞跃印度洋的美丽天堂!)
- 西宁马尔代夫图片(西宁的马尔代夫风光,美照流传网络!)
- 努库 马尔代夫(马尔代夫度假胜地——努库岛)
- 用马尔代夫做时钟(马尔代夫海景时钟,唤醒你的欢愉夏日)
- 瑞吉 马尔代夫(瑞吉马尔代夫度假村:天堂之旅)
- 眉山 马尔代夫(眉山旅游企业荣获马尔代夫颁发的最高奖项)
- 马尔代夫东江分夫(马尔代夫东江分夫景区,如此美不胜收)
- 简阳马尔代夫洪水(简阳马尔代夫遭遇洪水,请转告关切!)
- 芜湖 马尔代夫(芜湖旅行社推出马尔代夫旅游优惠!)
- 香港足球马尔代夫(香港足球球队将前往马尔代夫参加比赛)
- 马尔代夫入境规则(马尔代夫旅游注意事项:入境规则解析)
- 马尔代夫公园门票(马尔代夫公园门票价格及购买信息汇总)
- 马尔代夫冲绳视频(美丽的马尔代夫和冲绳,游记视频分享)
- 马尔代夫优美简介(了解马尔代夫,探寻印度洋的天堂之美)
- 马尔代夫博客视频(探索马尔代夫之美:博主分享视频游记)
- 郑钧 马尔代夫(郑钧与家人前往马尔代夫度假,放松身心享受海岛风光)
- 马尔代夫团队机票(抢先预订!马尔代夫团队机票限时特惠)
