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 ...
随机推荐
- Google AppCrawler初探
AppCrawler是什么 你可以把它想成类似monkey一样的工具,调起你的应用程序并执行各种动作(点击,输入,滑动等)来通过这种方式 来查看各种情况下应用程序的状态 官方文档链接:AppCrawl ...
- mysql uuid使用
java中可以使用UUID类来生成uuid,使用mysql也可以使用UUID函数来获取uuid,如 select UUID(); 也可以对查询的结果做一些处理,比如说将"-"替换成 ...
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- .net core 3.0 Signalr - 01 基础篇
因为将signalr作为单独的站点,此处需要建立两个项目,一个专门用于signalr作为推送项目,一个客户端(实际的业务项目) ## 基础知识速览 ### Clients对象属性 | 属性 | 描述 ...
- php EOF(heredoc)使用
PHP EOF(heredoc)是一种在命令行shell(如sh.csh.ksh.bash.PowerShell和zsh)和程序语言(像Perl.PHP.Python和Ruby)里定义一个字符串的方法 ...
- chown、chgrp、chmod
1.权限对应的数值 一开始理解权限对应的数值总是要去用二进制去算例如r-x是多少rwx是多少,后来才知道r就 是4,w就是2,x就是1,不管权限怎么变,他们对应的数值就是对应位相加.. 权限对于文件来 ...
- 什么是VR中的Locomotion?
Locomotion,本文中我称之为移位,是VR研究中最重要的话题之一.因为它属于VR中三大元老级操作(Selection选择,Manipulation操纵物体,Locomotion移位),其中,前两 ...
- [Swoole] 在Ubuntu下安装、快速开始
本文主要讲述在 Ubuntu 下编译安装 Swoole,并根据官方文档给出的demo进行了测试和搬运,包括:TCP服务器.UDP服务器.HTTP服务器.WebSocket服务器.异步客户端.定时器和协 ...
- redis系列之------字典
前言 字典, 又称符号表(symbol table).关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构. 在字典中 ...
- cocos2d-x Windows 环境搭建
本文cocos2d-x版本为3.14,3之后的版本差别不会很大 Python环境 由于需要用到几个.py文件建立工程,我们要先设置好python2.x的环境 python官网下载,在找到2.x的版本的 ...