爬取电影天堂最新电影(xpath结合lxml)
完整代码
import requests
from lxml import etree
from openpyxl import WorkbookBASEURL='https://www.dytt8.net'
HEADERS = {'Referer': 'https://www.dytt8.net/css/index.css','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}#获取影片的详情页url
def get_detail_urls(url):global HEADERSglobal BASEURLr = requests.get(url,headers=HEADERS)html = etree.HTML(r.text)hrefs=html.xpath('//table[@class="tbspan"]//a/@href')detail_urls = []for href in hrefs:detail_urls.append(BASEURL+href)return detail_urls#进入详情页获取详细信息
def spider(detail_url):r = requests.get(detail_url, headers=HEADERS)r.encoding='gbk'html = etree.HTML(r.text)global dura,scenarist,actor,category,language,director#获取标题title = str(html.xpath('//h1//font[@color="#07519a"]/text()')[0])#获取海报,有一些网页会没有相关信息,需要捕获这种异常try:img = str(html.xpath("//p//img/@src")[0])except IndexError:return#获取详情intros = html.xpath('//div[@id="Zoom"]//br')for intro in intros:intro=etree.tostring(intro, encoding='utf-8').decode('utf-8')#获取影片类别if intro.startswith('<br />◎类 别'):category = intro.replace('<br />◎类 别', '').strip()#获取影片语言elif intro.startswith('<br />◎语 言'):language = intro.replace('<br />◎语 言', '').strip()#获取影片片长elif intro.startswith('<br />◎片 长'):dura = intro.replace('<br />◎片 长', '').strip()#获取影片导演elif intro.startswith('<br />◎导 演'):director = intro.replace('<br />◎导 演', '').strip()# 获取影片编剧elif intro.startswith('<br />◎编 剧'):scenarist = intro.replace('<br />◎编 剧', '').strip()# 获取影片主演elif intro.startswith('<br />◎主 演'):actor = intro.replace('<br />◎主 演', '').strip()#构建字典存放每部电影的信息info = {'title':title,'category':category,'language':language,'duration':dura,'director':director,'scenarist':scenarist,'actor':actor,'img': img,}return info#将信息写入excel中
def save_excel(infos):wb = Workbook()dest_filename = '电影天堂最新电影.xlsx'ws1 = wb.activews1.title = "电影"#打印表头_ = ws1.cell(column=1, row=1, value="{0}".format('标题'))_ = ws1.cell(column=2, row=1, value="{0}".format('类型'))_ = ws1.cell(column=3, row=1, value="{0}".format('语言'))_ = ws1.cell(column=4, row=1, value="{0}".format('时长'))_ = ws1.cell(column=5, row=1, value="{0}".format('导演'))_ = ws1.cell(column=6, row=1, value="{0}".format('编剧'))_ = ws1.cell(column=7, row=1, value="{0}".format('主演'))_ = ws1.cell(column=8, row=1, value="{0}".format('图片url'))row = 2for info in infos:clo=1for key,value in info.items():_ = ws1.cell(column=clo, row=row, value="{0}".format(value))clo += 1row += 1wb.save(filename=dest_filename)def main():urls='https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'#存放所有影片信息字典的列表infos=[]#遍历1-5页for page in range(1,6):print('正在爬取第{}页:'.format(page))# 获取详情页url=urls.format(page)detail_urls=get_detail_urls(url)#进入详情页获取影片的详细信息for detail_url in detail_urls:info = spider(detail_url)infos.append(info)print(info)#写入excelsave_excel(infos)if __name__ == '__main__':main()
分析
爬取电影天堂最新电影的数据,先看一下页面
在这个页面标题名,信息不多,需要点击进入详情页才能获取详细信息
还有一点就是我们要获取的是多个页,而不只是一页上的所有电影
然后我们进行抓包发现
#第一页url
http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
#第二页的url
http://www.ygdy8.net/html/gndy/dyzz/list_23_2.html
#第三页的url
http://www.ygdy8.net/html/gndy/dyzz/list_23_3.html
#第四页的url
http://www.ygdy8.net/html/gndy/dyzz/list_23_4.html
这里就可以看出控制每一页的url格式为
’http://www.ygdy8.net/html/gndy/dyzz/list_23_‘+页码+‘.html’
流程
1. 制作要爬取页码的url
for page in range(1,6):print('正在爬取第{}页:'.format(page))# 获取详情页url=urls.format(page)
2. 通过xpath语法结合lxml,找到每个页面所有电影的详情页url
def get_detail_urls(url):r = requests.get(url,headers=HEADERS)html = etree.HTML(r.text)hrefs=html.xpath('//table[@class="tbspan"]//a/@href')detail_urls = []for href in hrefs:detail_urls.append(BASEURL+href)return detail_urls
3.进入详情页获取影片的详细信息
#进入详情页获取详细信息
def spider(detail_url):r = requests.get(detail_url, headers=HEADERS)# 编码的格式是gb2312,属于gbk的子集r.encoding='gbk'html = etree.HTML(r.text)#获取标题title = str(html.xpath('//h1//font[@color="#07519a"]/text()')[0])#获取海报,有一些网页会没有相关信息,需要捕获这种异常try:img = str(html.xpath("//p//img/@src")[0])except IndexError:return#获取详情intros = html.xpath('//div[@id="Zoom"]//br')for intro in intros:intro=etree.tostring(intro, encoding='utf-8').decode('utf-8')#获取影片类别if intro.startswith('<br />◎类 别'):category = intro.replace('<br />◎类 别', '').strip()#获取影片语言elif intro.startswith('<br />◎语 言'):language = intro.replace('<br />◎语 言', '').strip()#获取影片片长elif intro.startswith('<br />◎片 长'):dura = intro.replace('<br />◎片 长', '').strip()#获取影片导演elif intro.startswith('<br />◎导 演'):director = intro.replace('<br />◎导 演', '').strip()# 获取影片编剧elif intro.startswith('<br />◎编 剧'):scenarist = intro.replace('<br />◎编 剧', '').strip()# 获取影片主演,主演有很多个,但是为了省事这里只打印一个elif intro.startswith('<br />◎主 演'):actor = intro.replace('<br />◎主 演', '').strip()#构建字典存放每部电影的信息info = {'title':title,'category':category,'language':language,'duration':dura,'director':director,'scenarist':scenarist,'actor':actor,'img': img,}return info
4. 写入excel中
#将信息写入excel中
def save_excel(infos):wb = Workbook()dest_filename = '电影天堂最新电影.xlsx'ws1 = wb.activews1.title = "电影"#打印表头_ = ws1.cell(column=1, row=1, value="{0}".format('标题'))_ = ws1.cell(column=2, row=1, value="{0}".format('类型'))_ = ws1.cell(column=3, row=1, value="{0}".format('语言'))_ = ws1.cell(column=4, row=1, value="{0}".format('时长'))_ = ws1.cell(column=5, row=1, value="{0}".format('导演'))_ = ws1.cell(column=6, row=1, value="{0}".format('编剧'))_ = ws1.cell(column=7, row=1, value="{0}".format('主演'))_ = ws1.cell(column=8, row=1, value="{0}".format('图片url'))row = 2for info in infos:clo=1for key,value in info.items():_ = ws1.cell(column=clo, row=row, value="{0}".format(value))clo += 1row += 1wb.save(filename=dest_filename)
爬取电影天堂最新电影(xpath结合lxml)相关推荐
- 爬取电影天堂最新电影的名称和下载链接
此次的目标是爬取电影天堂最新200页的最新电影的电影名称和下载链接,电影的下载链接在二级页面,所以需要先匹配一级页面的所有链接,然后逐个请求二级页面,代码如下: """爬 ...
- 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本
多线程电影天堂最新资源爬取脚本.电影搜索脚本 PS:方便大家使用写到了HTML中生成表格. 线程可以在脚本里直接改,测试线程为30时IP可能会被限制访问.[阳光电影是电影天堂的马甲] 环境: Pyth ...
- Python 利用requests+BeautifulSoup4编写原生爬虫,爬取电影天堂最新电影,并打造最新电影下载及查询器
可能有许多人有这样的一种烦恼,当想要查看最近更新的电影时,不得不打开电影天堂的官网进行查询(当然如果你习惯用电影天堂下载电影的话/微笑),当点击了解电影详情的时候,网页往往就切换到了广告页面,很烦有没 ...
- 人生苦短,用Python爬取迅雷电影天堂最新电影ed2k
第一步仍然是创建scrapy项目与spider文件 切换到工作目录两条命令依次输入 scrapy startproject xunleidianying scrapy genspider xunlei ...
- python3 爬取电影天堂最新电影
''' 作业 爬去dytt 2019新片精品 -> 把所有电影的名字, 主演, 下载链接. 放在一个json文件里 {{"main_people": ["井柏然&q ...
- python下载电影天堂_【PY】没有电影看?来教你用Python爬取电影天堂最新电影!...
项目开始 第一步仍然是创建scrapy项目与spider文件 切换到工作目录两条命令依次输入 scrapy startproject xunleidianying scrapy genspider x ...
- Scrapy电影天堂最新电影信息爬取
环境:python 2.7 创建scrapy项目过程可见本人博客其他文章,这里不再赘述 直接上代码 主要代码 # -*- coding: utf-8 -*- import scrapyclass Dy ...
- 爬虫python下载电影_python爬虫抓取电影天堂最新电影
该小脚本实现对电影天堂网站的最新电影查找.from bs4 import BeautifulSoup import urllib import re url= 'http://www.ygdy8.ne ...
- 爬取电影天堂全站电影
新博客:https://wywwzjj.top/ 具体分析以后再补,静态页面也没啥好分析的. import requests, re from bs4 import BeautifulSoup imp ...
最新文章
- java 协程 实现 Akka
- 怎么用python画简单的图-Python | 用matplotlib画些简单的图
- 整型数组中三个数的最大乘积
- 《DSP using MATLAB》Problem 6.20
- android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
- 送书|北大出版:R语言数据分析与可视化从入门到精通
- 在6.1的PPC上做的cab包里面的html文件,安装后在手机上显示乱码
- Java的keytool命令
- python数字转换成中文大写_Python转换数字到中文大写格式
- idea社区版和企业版区别_idea 社区版开发 springboot及问题
- 零点存在定理与介值定理
- 关于王羲之的《兰亭集序》
- 关于golang的http库及常用库
- 酒店点餐系统开发详解(一)
- 每日一练2,希尔排序
- UG后处理—进给速度R模式输出研究
- dnmp,mac快速搭建php集成环境神器
- Linux复制命令cp进阶
- php 图片上传100k,图片上传大于100k就出Internal server error
- An Optimistic Perspective on Offline Reinforcement Learning
热门文章
- iOS 百思不得姐 项目
- 介绍一个成功的 Git 分支模型——终于知道如何管理git分支了(好文章!!强烈建议看本文的英文原文)
- matlab 场仿真,利用MATLAB软件实现温度场的仿真
- OpenCV实现目标跟踪
- OGRE 火炬之光(torchlight) 骨骼动画
- Expected value but found invalid token at character 1stack traceback:coroutine 0: [C]: in function
- CIO挂帅绩效考核 初战告捷秘诀何在?
- 二进制 八进制 十进制 十六进制
- VM虚拟机启动U盘内镜像
- SALOME源码分析:GUI模块