requests+lxml+xpath爬取电影天堂
1.导入相应的包
import requests
from lxml import etree
2.原始ur
url="https://www.dytt8.net/html/gndy/dyzz/list_23_1.html"

我们要爬取的是最新电影,在该界面中,我们发现,具体的信息存储在每个名字的链接中,因此我们要获取所有电影的链接才能得到电影的信息。同时我们观察url,发现
list_23_1,最后的1是页面位于第几页。右键点击其中一个电影的名字-检查。

我们发现,其部分连接位于具有class="tbspan"的table的<b>中,首先建立一个函数,用来得到所有的链接:
#用于补全url
base_url="https://www.dytt8.net"
def get_domain_urls(url):
response=requests.get(url=url,headers=headers)
text=response.text
html=etree.HTML(text)
#找到具有class="tbspan"的table下的所有a下面的href里面的值
detail_urls=html.xpath("//table[@class='tbspan']//a/@href")
#将url进行补全
detail_urls=map(lambda url:base_url+url,detail_urls)
return detail_urls
我们输出第1页中的所有url结果:
url="https://www.dytt8.net/html/gndy/dyzz/list_23_1.html"
for i in get_domain_urls(url):
print(i)

我们随便进入第一个链接:

按下F12,发现这些信息基本上都在div id="Zoom"中,接下来我们就可以对该界面进行解析。

def parse_detail_page(url):
movie={}
response=requests.get(url,headers=headers)
text=response.content.decode("GBK")
html=etree.HTML(text)
zoom=html.xpath("//div[@id='Zoom']")[0]
infos=zoom.xpath("//text()")
def parse_info(info,rule):
return info.replace(rule,"").lstrip()
for k,v in enumerate(infos):
if v.startswith("◎译 名"):
v=parse_info(v,"◎译 名").split("/")[0]
movie["name"]=v
elif v.startswith("◎产 地"):
v=parse_info(v,"◎产 地")
movie["country"]=v
elif v.startswith("◎类 别"):
v=parse_info(v,"◎类 别")
movie["category"]=v
elif v.startswith("◎豆瓣评分"):
v=parse_info(v,"◎豆瓣评分").split("/")[0]
movie["douban"]=v
elif v.startswith("◎导 演"):
v=parse_info(v,"◎导 演")
movie["director"]=v
elif v.startswith("◎主 演"):
v=parse_info(v,"◎主 演")
actors=[v]
for x in range(k+1,len(infos)):
actor=infos[x].strip()
if actor.startswith("◎"):
break
actors.append(actor)
movie["actors"]=actors
elif v.startswith("◎简 介"):
profile=""
for x in range(k+1,len(infos)):
tmp=infos[x].strip()
if tmp.startswith("【下载地址】"):
break
else:
profile=profile+tmp
movie["profile"]=profile
down_url=html.xpath("//td[@bgcolor='#fdfddf']/a/@href")
movie["down_url"]=down_url
return movie
最后将这两个整合进一个爬虫中:
def spider():
domain_url="https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html"
movies=[]
for i in range(1,2):
page=str(i)
url=domain_url.format(page)
detail_urls=get_domain_urls(url)
for detail_url in detail_urls:
movie = parse_detail_page(detail_url)
movies.append(movie)
print(movies)
运行爬虫,得到以下结果(在Json查看器中进行格式化):

至此,一个简单的电影爬虫就完成了。
requests+lxml+xpath爬取电影天堂的更多相关文章
- requests+lxml+xpath爬取豆瓣电影
(1)lxml解析html from lxml import etree #创建一个html对象 html=stree.HTML(text) result=etree.tostring(html,en ...
- 爬虫系列(十) 用requests和xpath爬取豆瓣电影
这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...
- 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论
这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
- python利用requests和threading模块,实现多线程爬取电影天堂最新电影信息。
利用爬到的数据,基于Django搭建的一个最新电影信息网站: n1celll.xyz (用的花生壳动态域名解析,服务器在自己的电脑上,纯属自娱自乐哈.) 今天想利用所学知识来爬取电影天堂所有最新电影 ...
- 14.python案例:爬取电影天堂中所有电视剧信息
1.python案例:爬取电影天堂中所有电视剧信息 #!/usr/bin/env python3 # -*- coding: UTF-8 -*- '''======================== ...
- scrapy框架用CrawlSpider类爬取电影天堂.
本文使用CrawlSpider方法爬取电影天堂网站内国内电影分类下的所有电影的名称和下载地址 CrawlSpider其实就是Spider的一个子类. CrawlSpider功能更加强大(链接提取器,规 ...
- Python爬取电影天堂指定电视剧或者电影
1.分析搜索请求 一位高人曾经说过,想爬取数据,要先分析网站 今天我们爬取电影天堂,有好看的美剧我在上面都能找到,算是很全了. 这个网站的广告出奇的多,用过都知道,点一下搜索就会弹出个窗口,伴随着滑稽 ...
- requests结合xpath爬取豆瓣最新上映电影
# -*- coding: utf-8 -*- """ 豆瓣最新上映电影爬取 # ul = etree.tostring(ul, encoding="utf-8 ...
- requests+BeautifulSoup | 爬取电影天堂全站电影资源
import requests import urllib.request as ur from bs4 import BeautifulSoup import csv import threadin ...
随机推荐
- Spring 梳理 - AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
Spring AOP那些学术概念—通知.增强处理连接点(JoinPoint)切面(Aspect) 1.我所知道的AOP 初看起来,上来就是一大堆的术语,而且还有个拉风的名字,面向切面编程,都说是 ...
- if [ $# -ne 1 ] 作用
在shell脚本中经常会使用if [ $# -ne 1 ];then...这类脚本 ];then 这段命令是用于判断参数的个数是否为1,不是则进行then的逻辑处理,其中$#表示参数个数,-ne是不等 ...
- 极光推送消息——RegistrationID方式
1.工具类 package com.test.util; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang ...
- C++——指针
目录 一.地址和指针 1.1内存 1.2针和指针变量 二.指针变量 2.1始化 2.2赋值 2.3指针类型算术运算 2.4指针类型关系运算 2.5指向指针的指针 三.指针与数组 3.1指针运算 3.2 ...
- JavaSE----03.数据类型
03.数据类型 1.数据类型分类 Java是强类型语言,Java中的数据类型分为两大类,分别是基本数据类型和引用数据类型.其中,基本数据类型由Java语言定义,其数据占用内存的大小固定,在内存 ...
- 即学即用的 30 段 Python 实用代码
[☞ 分享:最全最新的Python学习大礼包 ☜ 点击查看](https://mp.weixin.qq.com/s?__biz=MzU2MzgyODA4OA==&mid=100000592&a ...
- http post 请求,带参数,带请求头
#!/usr/bin/env python # -*- coding: utf-8 -*- import requests import json url = 'http://............ ...
- Linux入门(服务)
LInux入门之 服务 服务介绍 常驻在内存中的程序,且可以提供一些系统或网络功能,那就是服务.比如: apache提供web服务 ftp提供文件下载上传服务 ssh提供了远程连接服务 防火墙提供了安 ...
- 微信小程序模板消息
1 先去微信公众平台,选择现有模板,会有一个模板编号,模板中没有的关键词,可以申请新增. 微信公众平台直达:https://mp.weixin.qq.com 模板消息对应文档直达:https://de ...
- 第10项:重写equals时请遵守通用约定
重写equals方法看起来似乎很简单,但是有许多重写方式会导致错误,而且后果非常严重.最容易避免这类问题的办法就是不覆盖equals方法,在这种情况下,类的每个实例都只能与它自身相等.如果满足了以 ...