Xpath lxml库的安装和使用

提取的内容

随意选取的一段

节点包含的影片信息,如下所示:

<dd>
<i class="board-index board-index-1">1</i>
<a href="/films/1200486" title="我不是药神" class="image-link" data-act="boarditem-click" data-val="{movieId:1200486}">
<img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" alt="" class="poster-default">
<img alt="我不是药神" class="board-img" src="https://p0.pipi.cn/mmdb/d2dad59253751bd236338fa5bd5a27c710413.jpg?imageView2/1/w/160/h/220">
</a>
<div class="board-item-main">
<div class="board-item-content">
<div class="movie-item-info">
<p class="name">
<a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a>
</p>
<p class="star">
主演:徐峥,周一围,王传君
</p>
<p class="releasetime">上映时间:2018-07-05</p>
</div>
<div class="movie-item-number score-num">
<p class="score">
<i class="integer">9.</i>
<i class="fraction">6</i>
</p>
</div> </div>
</div>
</dd>

代码

# coding=utf-8
import requests
import random
import csv
from lxml import etree class MaoyanSpider(object):
def user_agent(self):
"""
return an User-Agent at random
:return:
"""
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
]
return random.choice(ua_list) def __init__(self):
self.url = 'https://www.maoyan.com/board/4?offset=0'
# self.headers = {'User-Agent': self.user_agent()}
self.headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0",
"Referer": "https://www.maoyan.com/"
} def do_requests(self, url):
print(self.headers)
r = requests.get(url=url, headers=self.headers)
r.encoding = 'utf-8'
res = r.text
return res # 下载图片 、 mp4 、 zip 都可以这样下载
def save_data_b(self, url, img_name):
r = requests.get(url)
with open('img/' + img_name, mode='wb') as f:
f.write(r.content) # 存为CSV
def save_data_csv(self, data_list):
headers = data_list[0].keys() # 获取标题 with open('movice.csv', 'w', newline='', encoding='utf-8') as f:
f_csv = csv.DictWriter(f, headers)
f_csv.writeheader()
f_csv.writerows(data_list) # 解析主页面
def parser_main_text(self, html_str):
# 创建解析对象
parse_html = etree.HTML(html_str) # 获取 class="board-wrapper" 的 dl 下的dd , 匹配 10 个<dd>节点
dd_list = parse_html.xpath('//dl[@class="board-wrapper"]/dd')
print(dd_list) # .// 表示dd节点的所有子节点后代节点
data_list = list()
for dd in dd_list:
# 获取信息
dataKV = {}
dataKV['title'] = dd.xpath('.//p[@class="name"]/a/text()')[0].strip()
dataKV['star'] = dd.xpath('.//p[@class="star"]/text()')[0].strip()
dataKV['release_time'] = dd.xpath('.//p[@class="releasetime"]/text()')[0].strip()
dataKV['img'] = dd.xpath('.//a/img[@class="board-img"]/@data-src')[0].strip()
# https://p0.pipi.cn/mmdb/d2dad59253751bd236338fa5bd5a27c710413.jpg?imageView2/1/w/160/h/220
img_name = (dataKV['img'].split('?')[0]).split('/')[-1]
# 下载图片
self.save_data_b(dataKV['img'], img_name)
data_list.append(dataKV) # 存为csv数据
# print(dataKV)
self.save_data_csv(data_list) def run(self):
# 请求页面
res_main_content = self.do_requests(self.url)
# 解析页面
self.parser_main_text(res_main_content) if __name__ == '__main__':
# 步骤
# 1. 请求主页面的内容
# 2. 爬取主页面中的文章列表标题、作者、时间
# 3. 下载图片
# 4. 存为csv
spider = MaoyanSpider()
spider.run()

生成的csv

title,star,release_time,img
我不是药神,"主演:徐峥,周一围,王传君",上映时间:2018-07-05,https://p0.pipi.cn/mmdb/d2dad59253751bd236338fa5bd5a27c710413.jpg?imageView2/1/w/160/h/220
肖申克的救赎,"主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿",上映时间:1994-09-10(加拿大),https://p0.pipi.cn/mmdb/fb7386020fa51b0fafcf3e2e3a0bbe694d17d.jpg?imageView2/1/w/160/h/220
海上钢琴师,"主演:蒂姆·罗斯,比尔·努恩 ,克兰伦斯·威廉姆斯三世",上映时间:2019-11-15,https://p0.pipi.cn/mmdb/d2dad592c7e7e1d2365bf1b63cd25951b722b.jpg?imageView2/1/w/160/h/220
绿皮书,"主演:维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼",上映时间:2019-03-01,https://p0.pipi.cn/mmdb/d2dad59253751b230f21f0818a5bfd4d8679c.jpg?imageView2/1/w/160/h/220
霸王别姬,"主演:张国荣,张丰毅,巩俐",上映时间:1993-07-26,https://p0.pipi.cn/mmdb/fb7386beddd338537c8ea3bb80d25a9078b13.jpg?imageView2/1/w/160/h/220
美丽人生,"主演:罗伯托·贝尼尼,朱斯蒂诺·杜拉诺,赛尔乔·比尼·布斯特里克",上映时间:2020-01-03,https://p0.pipi.cn/mmdb/d2dad592c7e7e1d2367a3507befaed31a5903.jpg?imageView2/1/w/160/h/220
这个杀手不太冷,"主演:让·雷诺,加里·奥德曼,娜塔莉·波特曼",上映时间:1994-09-14(法国),https://p0.pipi.cn/mmdb/d2dad592c7e7e13ba3ddd25677b4d70fc45fa.jpg?imageView2/1/w/160/h/220
小偷家族,"主演:中川雅也,安藤樱,松冈茉优",上映时间:2018-08-03,https://p0.pipi.cn/mmdb/d2dad5925372ffd7c387a9d01bddad81625c3.jpg?imageView2/1/w/160/h/220
哪吒之魔童降世,"主演:吕艳婷,囧森瑟夫,瀚墨",上映时间:2019-07-26,https://p0.pipi.cn/mmdb/d2dad592537923f0ee07acada3ac59b9f3ffb.jpg?imageView2/1/w/160/h/220
怦然心动,"主演:玛德琳·卡罗尔,卡兰·麦克奥利菲,艾丹·奎因",上映时间:2010-07-26(美国),https://p0.pipi.cn/mmdb/d2dad592b122ff8d3387a93ccab6036f616c1.jpg?imageView2/1/w/160/h/220

下载的图片

下载的图片在img中

参考文档

http://c.biancheng.net/python_spider/lxml-case.html

04 Xpath_[实例]爬取maoyan的更多相关文章

  1. python爬虫实例——爬取歌单

    学习自<<从零开始学python网络爬虫>> 爬取酷狗歌单,保存入csv文件 直接上源代码:(含注释) import requests #用于请求网页获取网页数据 from b ...

  2. python爬虫从入门到放弃(九)之 实例爬取上海高级人民法院网开庭公告数据

    通过前面的文章已经学习了基本的爬虫知识,通过这个例子进行一下练习,毕竟前面文章的知识点只是一个 一个单独的散知识点,需要通过实际的例子进行融合 分析网站 其实爬虫最重要的是前面的分析网站,只有对要爬取 ...

  3. scrapy实例:爬取中国天气网

    1.创建项目 在你存放项目的目录下,按shift+鼠标右键打开命令行,输入命令创建项目: PS F:\ScrapyProject> scrapy startproject weather # w ...

  4. 爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)

    环境 操作系统:CentOS 6.7 32-bit Python版本:2.6.6 第三方插件 selenium PhantomJS BeautifulSoup 代码 # -*- coding: utf ...

  5. 爬虫实例——爬取煎蛋网OOXX频道(反反爬虫——伪装成浏览器)

    煎蛋网在反爬虫方面做了不少工作,无法通过正常的方式爬取,比如用下面这段代码爬取无法得到我们想要的源代码. import requests url = 'http://jandan.net/ooxx' ...

  6. scrapy实例:爬取天气、气温等

    1.创建项目 scrapy startproject weather # weather是项目名称 scrapy crawl spidername开始运行,程序自动使用start_urls构造Requ ...

  7. python爬虫+正则表达式实例爬取豆瓣Top250的图片

    直接上全部代码 新手上路代码风格可能不太好 import requests import re from fake_useragent import UserAgent #### 用来伪造爬头部信息 ...

  8. python之爬虫(十一) 实例爬取上海高级人民法院网开庭公告数据

    通过前面的文章已经学习了基本的爬虫知识,通过这个例子进行一下练习,毕竟前面文章的知识点只是一个 一个单独的散知识点,需要通过实际的例子进行融合 分析网站 其实爬虫最重要的是前面的分析网站,只有对要爬取 ...

  9. Python实例---爬取下载喜马拉雅音频文件

    PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...

  10. [scrapy]实例:爬取jobbole页面

    工程概览: 创建工程 scrapy startproject ArticleSpider 创建spider cd /ArticleSpider/spiders/ 新建jobbole.py # -*- ...

随机推荐

  1. 命令行部署KingbaseES流复制

    建立系统数据库安装用户组及用户,在所有的节点执行 root用户登陆服务器,创建用户组及用户并且设置密码 groupadd -g 2000 kingbase useradd -G kingbase -g ...

  2. WPF开发分页控件:实现可定制化分页功能及实现原理解析

    概要 本文将详细介绍如何使用WPF(Windows Presentation Foundation)开发一个分页控件,并深入解析其实现原理.我们将通过使用XAML和C#代码相结合的方式构建分页控件,并 ...

  3. 提高生产力!这10个Lambda表达式必须掌握,开发效率嘎嘎上升!

    在Java8及更高版本中,Lambda表达式的引入极大地提升了编程的简洁性和效率.本文将围绕十个关键场景,展示Lambda如何助力提升开发效率,让代码更加精炼且易于理解. 集合遍历 传统的for-ea ...

  4. #BFS,二进制#CF1776J Italian Data Centers

    洛谷题面 CF1776J 分析 将原图的点所拆开的点按二进制编号,那么同一个点之间连边当且仅当恰好一个二进制位不同, 不同点之间连边颜色相同则其二进制相同,否则完全相反. 可以钦定起点就是 \((x, ...

  5. #线性基#CF1100F Ivan and Burgers

    题目传送门 分析 线段树上直接维护线性基是三个log的.(一定要合并) 考虑一种分治做法,在 \([l,mid]\) 和 \((mid,r]\) 的询问分治处理, 跨过 \([mid,mid+1]\) ...

  6. jcmd:JDK14中的调试神器

    目录 简介 jcmd的语法 列出运行的JVM 打印stack信息 打印heap info 打印heap dump 统计heap使用情况 JFR功能 总结 简介 jcmd是JDK自带的调试工具,具有非常 ...

  7. Techwalk攻略 | 来北京与OpenHarmony技术大会一起技术漫游!

     去北京Citywalk已经不是新鲜事? 不如来第二届OpenHarmony技术大会一起Techwalk! 大会即将开幕请速速收藏以下打卡攻略↓ 点击链接,观看线上直播

  8. 【开源三方库】Aki:一行代码极简体验JS&C++跨语言交互

      开源项目 OpenHarmony 是每个人的 OpenHarmony 一.简介 OpenAtom OpenHarmony(以下简称"OpenHarmony")的前端开发语言是A ...

  9. OpenHarmony将携新成果亮相HDC2022

     第四届华为开发者大会 2022(Together)将于11月4日-6日在东莞召开,OpenAtom OpenHarmony(以下简称"OpenHarmony")将携新生态成果亮相 ...

  10. OpenHarmony 3.1 Release版本关键特性解析——ArkUI框架又有哪些新增能力?

     ArkUI 是一套 UI 开发框架,它提供了开发者进行应用 UI 开发时所必须的能力.随着 OpenAtom OpenHarmony(以下简称"OpenHarmony") 3.1 ...