python爬取电影天堂
爬取的网址:
http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
使用的环境:
pychram+anaconda5.4.7+python3.7.1
使用的函数库:
requests+pyquery+csv+time
爬取思路:先在爬取的网址中得到电影详情页的网址,再访问详情页提取需要的信息。
网站分析:
关于翻页,网站第一页为http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
第二页为http://www.ygdy8.net/html/gndy/dyzz/list_23_2.html
第三个为http://www.ygdy8.net/html/gndy/dyzz/list_23_3.html
可以看出,仅有html前的数字变化,并且此数字对应的是页码
关于提取详情页网址,可以看到详情页的网址在b节点下的a节点的href属性中,在此信息前面加上http://www.ygdy8.net,就可以访问详情页。
提取详情页信息:
可以看到详情页的信息在下面部分的不同节点中,只要想办法进行提取就可以了。
代码编写:
引入库函数和获取详情页的网址,通过requests的get访问进行访问,提取b节点下的a节点的href属性,保存为一个列表进行返回。此列表中就是当前页面下,所有电影详情页的网址。
import requests
from pyquery import PyQuery as pq
import csv
import time
def get_one_page(url):response = requests.get(url, headers=headers)doc = pq(response.text)url_d = []html_end = doc("b a")for i in html_end.items():res = "http://www.ygdy8.net" + i.attr('href')url_d.append(res)return url_d
获取详情页的信息:
此函数接受的是一个电影详情页的网址,这里获取的源代码的content格式,也就是二进制格式。因为电影天堂这个网站书写的不太规范,不知道是不是故意的。它自己说是用gbk方式进行的编码,可是使用gbk进行解码时,还是有一些字符解析不了,所以这里就不管了,直接用了一个content。关于年代,产地这些信息都是在每一个br节点后,而且br节点好像也不是完整的,一开始我怎么也提取不到这个信息。在jupyter中实验时,我发现将其构建成字符串格式后遍历,进行条件判断可以提取。主演这个信息,网站里面有很多个,我只提取了前三个主演。使用enumerate函数是因为主演哪里只有第一个可以进行条件判断,简介信息也不在简介的后面,所有加一个索引,方便进行提取。
def get_detail_page(url_detail):response_detail = requests.get(url_detail, headers = headers)html = response_detail.contentdoc_detail = pq(html)res = []title = doc_detail("div .title_all h1").text()res.append(title)img = doc_detail("p img").attr("src")res.append(img)r = doc_detail("p br")a = []for q in r.items():a.append(str(q))for idx, idy in enumerate(a):if "年 代" in idy:year = idy[12:]res.append(year)if "产 地" in idy:place = idy[12:]res.append(place)if "类 别" in idy:category = idy[12:]res.append(category)if "语 言" in idy:language = idy[12:]res.append(language)if "上映日期" in idy:data = idy[12:]res.append(data)if "豆瓣评分" in idy:douban = idy[12:15]res.append(douban)if "片 长" in idy:time = idy[12:]res.append(time)if "导 演" in idy:director = idy[12:]res.append(director)if "主 演" in idy:actor = idy[12:] + "," + a[idx + 1][12:] + "," + a[idx + 2][12:]res.append(actor)if "简 介" in idy:intro = a[idx + 2][8:]res.append(intro)download = doc_detail("p a").attr("href")res.append(download)return res
主函数和保存函数:主函数中是通过两个for循环,对每一个页和每一个详情页的信息进行提取。详情页信息提取加了一个异常判断try语句,上面也说过了,一些页面用gbk编码会报错。所有我这里放弃了这部分的信息。最后是爬取了50页的电影信息,并保存在了csv文件中。
def write_to_csv(res):with open("xunlei.csv","a+") as xl:writer = csv.writer(xl)writer.writerow(res)
if __name__ == "__main__":xunlei = []for i in range(1,50):print("正在爬取第{}页".format(i))url = "http://www.ygdy8.net/html/gndy/dyzz/list_23_" + str(i)+ ".html"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}url_details = get_one_page(url)tr = 1for url_detail in url_details:print("正在爬取{}小页".format(tr))try:res = get_detail_page(url_detail)write_to_csv(res)except UnicodeEncodeError:continuetr += 1time.sleep(5)time.sleep(5)
结果如下,这个爬取有点久,因为我用time函数设置的时间有点长,我运行完用了一个多小时。主要是还是因为一开始编写的时候,访问的有点快了,电影天堂就把我的IP封了。
总共是爬取1174部电影的数据,不过其中有一部分信息不太完整,可能后面的网站结构有了一点变换。(突然发现,我保存的文件名居然叫迅雷,额)
python爬取电影天堂相关推荐
- Python 爬取电影天堂top最新电影
Python爬虫有他无可比拟的优势:语法简单,经常几十行代码就能轻松解决问题,相比于JAVA,C,PHP;第三方库丰富,Python强大而又丰富的第三方库使他几乎可以无所不能.今天我们就来用用Pyth ...
- python爬取电影天堂的下载链接
python爬取电影天堂dytt8的下载链接 电影天堂下载链接都是magnet的,搞下来想下就下没有广告 建一个main.py 一个一个挨着去爬肯定慢啊,建一个多线程的去爬 mui.py 多线程有可能 ...
- python爬取电影天堂新片精品模块电影列表,并用迅雷下载
python版本是3.6.5,上代码: # 爬取电影天堂 from selenium import webdriver import requests from bs4 import Beautifu ...
- python爬取电影天堂首页
用python写了个小爬虫,用来爬取电影天堂首页放置的几十部电影的名称,上映日期和下载链接,用到了beautifulsoup库和lxml库用来解析 代码如下: import requests impo ...
- python 爬取电影天堂电影
主要介绍爬取电影天堂首页的电影列表,并将结果保存为csv文件. 1.首先导入需要的模块 import requests from bs4 import BeautifulSoup import csv ...
- python爬取电影天堂(requests模块)
使用requests,lxml对电影天堂网站数据的爬取 在这里插入代码片 # _*_ coding:utf _*_ # 邮箱:3195841740@qq.com # 人员:21292 # 日期:202 ...
- python爬取电影天堂电影信息
from lxml import etree import requests # url='https://www.dytt8.net/html/gndy/dyzz/index.html' heade ...
- python爬取电影天堂beautiful_Python爬虫 -- 抓取电影天堂8分以上电影
看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...
- 360影视大全 python_「www.dy2018.com」python爬取电影天堂(www.dy2018.com)所有视屏的所有链接 - 金橙教程网...
www.dy2018.com 用到的库为Requests,bs4,re,pyMySQL 目的是将链接存入数据库,数据库分为三张表: category:存储分类 video:存储视屏的信息 link:存 ...
最新文章
- PHP在各种HTTP服务器上运行模式分析
- 学习笔记Flink(八)—— 基于Flink 在线交易反欺诈检测
- node.js 函数外定义的变量 函数内赋值后为什么不能带出_(44)python少儿编程之函数(五)--- 作用域...
- 分析|CVE-2021-3156-sudo堆溢出高危漏洞
- chrome----timing含义解释
- 小程序app is not defined
- set和map去重调用什么方法_【ES6】Set、Map
- Docker运行tensorflow试试
- 超越传感器和相机 - 将物联网从云端迁移到物理世界
- 安卓案例:结合volley使用Gson
- Mac安装Redis
- 解决:Assign object to a variable before exporting as module default
- Vs2010创建网站
- 第一次创建STC15串口程序模板
- linux 设置色彩深度,wayland显示服务器,怎么把色彩深度设置成24位
- 折线图css,echarts实现折线图的代码(附图)
- Hark的数据结构与算法练习之插入排序
- 类似捕鱼达人的金币效果
- 解决: This Python interpreter is in a conda environment, but the environment has not been activat
- gym/101955/problem/E - The Kouga Ninja Scrolls 线段数 维护 切比雪夫距离 2018沈阳icpc