进入豆瓣电影后点击全部正在热映:

然后首先需要将数据请求下来。

一个爬虫基本上都是由两个部分组成的:1、将目标网站上的页面抓取下来,2、将抓取下来的数据根据一定的规则进行提取。

从网页源代码可以看到所有电影信息都在ul标签里的li标签下,因此需要拿到class=lists的ul:

import requests
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',#在爬虫里面如果出现了Referer最好也粘上去,因为有时候服务器会根据Referer来判断请求时由浏览器还是爬虫发出的'Referer':'https://www.douban.com/'
}
url = 'https://movie.douban.com/cinema/nowplaying/chengdu/'
response = requests.get(url,headers=headers)#发起请求得到响应
text = response.text#返回一个经过解码的字符串
content = response.content#返回原生的没有经过处理的网页,是bytes类型
html = etree.HTML(text)#将其解码
ul = html.xpath("//ul[@class='lists']")
print(ul)
[<Element ul at 0x16b2924e508>, <Element ul at 0x16b2924e488>]

但打印出来看到有两个ul,因此需要判断我们想要的是哪一个ul:

从网页源代码发现除了正在上映的以外还有即将上映的,而我们想要的是第一个,因此使用ul = html.xpath("//ul[@class='lists']")[0]就行了。打印一下就可以看到需要的信息了:print(etree.tostring(ul,encoding='utf-8').decode('utf-8'))。得到了所有电影的信息之后就需要获取每一步电影,通过ul获取所有的li标签:

import requests
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',#在爬虫里面如果出现了Referer最好也粘上去,因为有时候服务器会根据Referer来判断请求时由浏览器还是爬虫发出的'Referer':'https://www.douban.com/'
}
url = 'https://movie.douban.com/cinema/nowplaying/chengdu/'
response = requests.get(url,headers=headers)#发起请求得到响应
text = response.text#返回一个经过解码的字符串
content = response.content#返回原生的没有经过处理的网页,是bytes类型
html = etree.HTML(text)#将其解码
ul = html.xpath("//ul[@class='lists']")[0]
lis = ul.xpath("./li")
for li in lis:print(etree.tostring(li,encoding='utf-8').decode('utf-8'))

比如说我们要拿到大黄蜂这个title,通过data-title就可以获取到:

for li in lis:title = li.xpath("@data-title")print(title)
['大黄蜂']
['一条狗的回家路']
['我想吃掉你的胰脏']
['家和万事惊']
['掠食城市']
['“大”人物']
['白蛇:缘起']
['密室逃生']
['闯堂兔3囧囧时光机']
['钢铁飞龙之奥特曼崛起']
['森林奇缘']
['海王']
['来电狂响']
['四个春天']
['大路朝天']
['蜘蛛侠:平行宇宙']
['燃点']
['命运之夜——天之杯:恶兆之花']
['养家之人']

这样就获取到了所有的title了。

然后取第0个就可以拿到真正的标题了:title = li.xpath("@data-title")[0]

然后用同样的方法拿到其它信息:

import requests
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',#在爬虫里面如果出现了Referer最好也粘上去,因为有时候服务器会根据Referer来判断请求时由浏览器还是爬虫发出的'Referer':'https://www.douban.com/'
}
url = 'https://movie.douban.com/cinema/nowplaying/chengdu/'
response = requests.get(url,headers=headers)#发起请求得到响应
text = response.text#返回一个经过解码的字符串
content = response.content#返回原生的没有经过处理的网页,是bytes类型
html = etree.HTML(text)#将其解码
ul = html.xpath("//ul[@class='lists']")[0]
lis = ul.xpath("./li")
movies = []#存取电影信息的列表
for li in lis:title = li.xpath("@data-title")[0]score = li.xpath("@data-score")[0]release = li.xpath("@data-release")[0]duration = li.xpath("@data-duration")[0]region = li.xpath("@data-region")[0]director = li.xpath("@data-director")[0]actors = li.xpath("@data-actors")[0]poster = li.xpath('.//img/@src')[0]#选中当前节点下的所有子孙节点中的img标签获取其中的src属性#构造字典movie = {'标题':title,'得分':score,'上映时间':release,'时长':duration,'国家':region,'导演':director,'演员':actors,'poster':poster}movies.append(movie)
for movie in movies:print(movie)
{'标题': '大黄蜂', '得分': '7.2', '上映时间': '2018', '时长': '114分钟', '国家': '美国', '导演': '特拉维斯·奈特', '演员': '海莉·斯坦菲尔德 / 小豪尔赫·兰登伯格 / 约翰·塞纳', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2541662397.jpg'}
{'标题': '一条狗的回家路', '得分': '6.7', '上映时间': '2019', '时长': '96分钟', '国家': '美国', '导演': '查尔斯·马丁·史密斯', '演员': '艾什莉·贾德 / 乔纳·豪尔-金 / 亚历山德拉·希普', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2545487478.jpg'}
{'标题': '我想吃掉你的胰脏', '得分': '7.0', '上映时间': '2018', '时长': '108分钟', '国家': '日本', '导演': '牛岛新一郎', '演员': '高杉真宙 / Lynn / 藤井雪代', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2545571306.jpg'}
{'标题': '家和万事惊', '得分': '7.2', '上映时间': '2019', '时长': '92分钟', '国家': '中国大陆 香港', '导演': '邱礼涛', '演员': '吴镇宇 / 古天乐 / 袁咏仪', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2545486388.jpg'}
{'标题': '“大”人物', '得分': '6.7', '上映时间': '2019', '时长': '107分钟', '国家': '中国大陆', '导演': '五百', '演员': '王千源 / 包贝尔 / 王迅', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2544988187.jpg'}
{'标题': '白蛇:缘起', '得分': '8.0', '上映时间': '2019', '时长': '95分钟', '国家': '中国大陆 美国', '导演': '黄家康 赵霁', '演员': '张喆 / 杨天翔 / 唐小喜', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2544313786.jpg'}
{'标题': '掠食城市', '得分': '6.7', '上映时间': '2018', '时长': '128分钟', '国家': '美国 新西兰', '导演': '克里斯蒂安·瑞沃斯', '演员': '海拉·西尔玛 / 雨果·维文 / 金吉', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2543972440.jpg'}
{'标题': '密室逃生', '得分': '7.4', '上映时间': '2019', '时长': '100分钟', '国家': '美国', '导演': '亚当·罗比特尔', '演员': '泰勒·拉塞尔 / 洛根·米勒 / 黛博拉·安沃尔', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2543541082.jpg'}
{'标题': '闯堂兔3囧囧时光机', '得分': '0', '上映时间': '2019', '时长': '88分钟', '国家': '中国大陆', '导演': '曾宪林', '演员': '', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2545487918.jpg'}
{'标题': '钢铁飞龙之奥特曼崛起', '得分': '0', '上映时间': '2019', '时长': '90分钟', '国家': '中国大陆', '导演': '王巍', '演员': '', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2544885346.jpg'}
{'标题': '森林奇缘', '得分': '0', '上映时间': '2018', '时长': '91分钟', '国家': '乌克兰', '导演': '奥列格·马拉姆兹', '演员': 'Nadezhda Dorofeeva / Aleksey Zavgorodniy / Yevhen Malukha', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2542552017.jpg'}
{'标题': '海王', '得分': '7.8', '上映时间': '2018', '时长': '143分钟', '国家': '美国 澳大利亚', '导演': '温子仁', '演员': '杰森·莫玛 / 艾梅柏·希尔德 / 威廉·达福', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2541280047.jpg'}
{'标题': '来电狂响', '得分': '6.0', '上映时间': '2018', '时长': '103分钟', '国家': '中国大陆', '导演': '于淼', '演员': '佟大为 / 马丽 / 霍思燕', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2542268337.jpg'}
{'标题': '大路朝天', '得分': '0', '上映时间': '2018', '时长': '120分钟', '国家': '中国大陆', '导演': '苗月', '演员': '李保田 / 陈瑾 / 巴登西绕', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2543162197.jpg'}
{'标题': '四个春天', '得分': '8.9', '上映时间': '2017', '时长': '105分钟', '国家': '中国大陆', '导演': '陆庆屹', '演员': '陆运坤 / 李桂贤', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2540578887.jpg'}
{'标题': '蜘蛛侠:平行宇宙', '得分': '8.7', '上映时间': '2018', '时长': '116分钟(中国大陆)', '国家': '美国', '导演': '鲍勃·佩尔西凯蒂 彼得·拉姆齐 罗德尼·罗斯曼', '演员': '沙梅克·摩尔 / 杰克·约翰逊 / 海莉·斯坦菲尔德', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2542867516.jpg'}
{'标题': '燃点', '得分': '5.9', '上映时间': '2019', '时长': '107分钟', '国家': '中国大陆', '导演': '关琇 萧屺楠', '演员': '罗永浩 / 戴威 / 张颖', 'poster': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2541278708.jpg'}
{'标题': '命运之夜——天之杯:恶兆之花', '得分': '7.6', '上映时间': '2017', '时长': '119分钟(中国大陆)', '国家': '日本', '导演': '须藤友德', '演员': '杉山纪彰 / 下屋则子 / 神谷浩史', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2545044503.jpg'}
{'标题': '养家之人', '得分': '8.3', '上映时间': '2017', '时长': '94分钟', '国家': '爱尔兰 加拿大 卢森堡', '导演': '诺拉·托梅', '演员': '莎拉·乔德利 / 索玛·查亚 / 诺林·古拉姆高斯', 'poster': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2544510784.jpg'}

然后将爬取到的数据保存在csv文件中:

import requests
from lxml import etree
import json
import csvheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36','Referer':'https://www.douban.com/'
}url = 'https://movie.douban.com/cinema/nowplaying/chengdu/'
response = requests.get(url,headers=headers)
text = response.text
html = etree.HTML(text)
ul = html.xpath('//ul[@class="lists"]')[0]
lis = ul.xpath('./li')
f = open('电影.csv','w',encoding='utf-8')
filedname = ['标题','得分','年代','时长','产地','导演','演员']
writer = csv.DictWriter(f,fieldnames=filedname)
writer.writeheader()
for li in lis:title = li.xpath('@data-title')[0]score = li.xpath('@data-score')[0]data = li.xpath('@data-release')[0]time = li.xpath('@data-duration')[0]place = li.xpath('@data-region')[0]director = li.xpath('@data-director')[0]actor = li.xpath('@data-actors')[0]movie = {'标题':title,'得分':score,'年代':data,'时长':time,'产地':place,'导演':director,'演员':actor}writer.writerow(movie)
f.close()

XPath实战之爬取豆瓣电影相关推荐

  1. Requests库实战(三)---爬取豆瓣电影详细信息

    完整代码 爬取豆瓣电影的详细信息 地址:豆瓣电影动画 向下滑动时新增的数据也是Ajax请求,原理和上一个项目是一样的.唯一的不同是此处请求url携带了多个参数 import requests impo ...

  2. Python爬虫实战 | (3) 爬取豆瓣电影Top250

    在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...

  3. 爬虫实战:爬取豆瓣电影 Top-250 到 Excel 表格中

    最近在家无聊自学了python的一些基础知识.后来看到许多朋友都在写爬虫,自己感觉很有意思,也想试一下 >____< 其实本来我是想将数据爬取到excel之后再增加一些数据库操作,然后用f ...

  4. Python爬虫实战(爬取豆瓣电影)

    首先介绍一下python的几个库,python之所以在实现爬虫方面有独特的优势,在于其类库非常的丰富,基本涵盖了所有的需求,只要找到对应的库进行import,这就类似于Java中导入类库或者jar包那 ...

  5. Python实战:爬取豆瓣电影

    春天来了,万物复苏,很多学生都要做课设项目了,又到了码农们爬虫的季节,空气中弥漫着一阵阵激情的交流声! 一.通用思路 找到豆瓣电影的汇总页面,整个页面都是各种电影的信息(相当于一个列表,把电影摆到一起 ...

  6. 利用xpath解析器爬取豆瓣电影top250

    首先声明需要用的库,当然我还用到了os库,将工作路径修改到了我指定的路径.os.chdir(r"C:\Users-") from lxml import etree import ...

  7. Python网络爬虫:利用正则表达式爬取豆瓣电影top250排行前10页电影信息

    在学习了几个常用的爬取包方法后,转入爬取实战. 爬取豆瓣电影早已是练习爬取的常用方式了,网上各种代码也已经很多了,我可能现在还在做这个都太土了,不过没事,毕竟我也才刚入门-- 这次我还是利用正则表达式 ...

  8. python如何爬取豆瓣_Python实战之如何爬取豆瓣电影?本文教你

    爬虫又称为网页蜘蛛,是一种程序或脚本. 但重点在于,它能够按照一定的规则,自动获取网页信息. 爬虫的基本原理--通用框架 1.挑选种子URL: 2.讲这些URL放入带抓取的URL列队: 3.取出带抓取 ...

  9. python爬取豆瓣电影并分析_Python实战之如何爬取豆瓣电影?本文教你

    爬虫又称为网页蜘蛛,是一种程序或脚本. 但重点在于,它能够按照一定的规则,自动获取网页信息. 爬虫的基本原理--通用框架 1.挑选种子URL: 2.讲这些URL放入带抓取的URL列队: 3.取出带抓取 ...

最新文章

  1. android 双击home退出程序,Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题...
  2. java netfox_SpringFox集成原理
  3. python图像识别步骤_利用百度智能云结合Python体验图像识别(转载来自qylruirui)
  4. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
  5. SSD Network Architecture--keras version
  6. Flutter代码锦囊---摇一摇
  7. JAVA代码实现hive连接mysql_Java采用JDBC的方式连接Hive(SparkSQL)
  8. load runner
  9. 产业互联网周报:滴滴被处以80亿元巨额罚款;消息称中国正启动欧洲企业到中国上市计划;字节跳动确认自研专用芯片...
  10. 谈demo、原型、产品的区别
  11. 8光12电ERPS工业级环网交换机 PLC自动化环网柜一键环网交换机
  12. 基于SSM【爱校图书馆管理系统】附源码+论文
  13. RANSAC算法(原理及代码实现+迭代次数参数自适应)
  14. Reason Studios Reason 12 v12.2.5 WiN 音乐制作软件和机架插件
  15. windows打印机服务开启方法
  16. POI插入附件到Excle
  17. 一篇文章,讲透“复盘”
  18. 51单片机外接ADC0808制作简易电压表
  19. 深度神经网络在光通信及数字信号处理领域的应用总结(AI-ODSP)(二)
  20. 让你终身受益的5个定律

热门文章

  1. 多机房动环状态网络触摸屏监控解决方案
  2. IT忍者神龟之Redis操作工具类封装
  3. ruduce用起来原来这么爽
  4. Java语言中J - R开头的英汉对照学习
  5. Apache配置+php配置
  6. 信号叠加提升信噪比(含证明)
  7. 如何使用开源项目申请jetbrains激活账号02
  8. 视频教程-Python全栈9期(第十部分):CRM系统-Python
  9. Spring Boot接收前端上传的多个文件
  10. GridViewAdapter