完整代码

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)相关推荐

  1. 爬取电影天堂最新电影的名称和下载链接

    此次的目标是爬取电影天堂最新200页的最新电影的电影名称和下载链接,电影的下载链接在二级页面,所以需要先匹配一级页面的所有链接,然后逐个请求二级页面,代码如下: """爬 ...

  2. 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本

    多线程电影天堂最新资源爬取脚本.电影搜索脚本 PS:方便大家使用写到了HTML中生成表格. 线程可以在脚本里直接改,测试线程为30时IP可能会被限制访问.[阳光电影是电影天堂的马甲] 环境: Pyth ...

  3. Python 利用requests+BeautifulSoup4编写原生爬虫,爬取电影天堂最新电影,并打造最新电影下载及查询器

    可能有许多人有这样的一种烦恼,当想要查看最近更新的电影时,不得不打开电影天堂的官网进行查询(当然如果你习惯用电影天堂下载电影的话/微笑),当点击了解电影详情的时候,网页往往就切换到了广告页面,很烦有没 ...

  4. 人生苦短,用Python爬取迅雷电影天堂最新电影ed2k

    第一步仍然是创建scrapy项目与spider文件 切换到工作目录两条命令依次输入 scrapy startproject xunleidianying scrapy genspider xunlei ...

  5. python3 爬取电影天堂最新电影

    ''' 作业 爬去dytt 2019新片精品 -> 把所有电影的名字, 主演, 下载链接. 放在一个json文件里 {{"main_people": ["井柏然&q ...

  6. python下载电影天堂_【PY】没有电影看?来教你用Python爬取电影天堂最新电影!...

    项目开始 第一步仍然是创建scrapy项目与spider文件 切换到工作目录两条命令依次输入 scrapy startproject xunleidianying scrapy genspider x ...

  7. Scrapy电影天堂最新电影信息爬取

    环境:python 2.7 创建scrapy项目过程可见本人博客其他文章,这里不再赘述 直接上代码 主要代码 # -*- coding: utf-8 -*- import scrapyclass Dy ...

  8. 爬虫python下载电影_python爬虫抓取电影天堂最新电影

    该小脚本实现对电影天堂网站的最新电影查找.from bs4 import BeautifulSoup import urllib import re url= 'http://www.ygdy8.ne ...

  9. 爬取电影天堂全站电影

    新博客:https://wywwzjj.top/ 具体分析以后再补,静态页面也没啥好分析的. import requests, re from bs4 import BeautifulSoup imp ...

最新文章

  1. java 协程 实现 Akka
  2. 怎么用python画简单的图-Python | 用matplotlib画些简单的图
  3. 整型数组中三个数的最大乘积
  4. 《DSP using MATLAB》Problem 6.20
  5. android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
  6. 送书|北大出版:R语言数据分析与可视化从入门到精通
  7. 在6.1的PPC上做的cab包里面的html文件,安装后在手机上显示乱码
  8. Java的keytool命令
  9. python数字转换成中文大写_Python转换数字到中文大写格式
  10. idea社区版和企业版区别_idea 社区版开发 springboot及问题
  11. 零点存在定理与介值定理
  12. 关于王羲之的《兰亭集序》
  13. 关于golang的http库及常用库
  14. 酒店点餐系统开发详解(一)
  15. 每日一练2,希尔排序
  16. UG后处理—进给速度R模式输出研究
  17. dnmp,mac快速搭建php集成环境神器
  18. Linux复制命令cp进阶
  19. php 图片上传100k,图片上传大于100k就出Internal server error
  20. An Optimistic Perspective on Offline Reinforcement Learning

热门文章

  1. iOS 百思不得姐 项目
  2. 介绍一个成功的 Git 分支模型——终于知道如何管理git分支了(好文章!!强烈建议看本文的英文原文)
  3. matlab 场仿真,利用MATLAB软件实现温度场的仿真
  4. OpenCV实现目标跟踪
  5. OGRE 火炬之光(torchlight) 骨骼动画
  6. Expected value but found invalid token at character 1stack traceback:coroutine 0: [C]: in function
  7. CIO挂帅绩效考核 初战告捷秘诀何在?
  8. 二进制 八进制 十进制 十六进制
  9. VM虚拟机启动U盘内镜像
  10. SALOME源码分析:GUI模块