爬取的网址:
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爬取电影天堂相关推荐

  1. Python 爬取电影天堂top最新电影

    Python爬虫有他无可比拟的优势:语法简单,经常几十行代码就能轻松解决问题,相比于JAVA,C,PHP;第三方库丰富,Python强大而又丰富的第三方库使他几乎可以无所不能.今天我们就来用用Pyth ...

  2. python爬取电影天堂的下载链接

    python爬取电影天堂dytt8的下载链接 电影天堂下载链接都是magnet的,搞下来想下就下没有广告 建一个main.py 一个一个挨着去爬肯定慢啊,建一个多线程的去爬 mui.py 多线程有可能 ...

  3. python爬取电影天堂新片精品模块电影列表,并用迅雷下载

    python版本是3.6.5,上代码: # 爬取电影天堂 from selenium import webdriver import requests from bs4 import Beautifu ...

  4. python爬取电影天堂首页

    用python写了个小爬虫,用来爬取电影天堂首页放置的几十部电影的名称,上映日期和下载链接,用到了beautifulsoup库和lxml库用来解析 代码如下: import requests impo ...

  5. python 爬取电影天堂电影

    主要介绍爬取电影天堂首页的电影列表,并将结果保存为csv文件. 1.首先导入需要的模块 import requests from bs4 import BeautifulSoup import csv ...

  6. python爬取电影天堂(requests模块)

    使用requests,lxml对电影天堂网站数据的爬取 在这里插入代码片 # _*_ coding:utf _*_ # 邮箱:3195841740@qq.com # 人员:21292 # 日期:202 ...

  7. python爬取电影天堂电影信息

    from lxml import etree import requests # url='https://www.dytt8.net/html/gndy/dyzz/index.html' heade ...

  8. python爬取电影天堂beautiful_Python爬虫 -- 抓取电影天堂8分以上电影

    看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...

  9. 360影视大全 python_「www.dy2018.com」python爬取电影天堂(www.dy2018.com)所有视屏的所有链接 - 金橙教程网...

    www.dy2018.com 用到的库为Requests,bs4,re,pyMySQL 目的是将链接存入数据库,数据库分为三张表: category:存储分类 video:存储视屏的信息 link:存 ...

最新文章

  1. PHP在各种HTTP服务器上运行模式分析
  2. 学习笔记Flink(八)—— 基于Flink 在线交易反欺诈检测
  3. node.js 函数外定义的变量 函数内赋值后为什么不能带出_(44)python少儿编程之函数(五)--- 作用域...
  4. 分析|CVE-2021-3156-sudo堆溢出高危漏洞
  5. chrome----timing含义解释
  6. 小程序app is not defined
  7. set和map去重调用什么方法_【ES6】Set、Map
  8. Docker运行tensorflow试试
  9. 超越传感器和相机 - 将物联网从云端迁移到物理世界
  10. 安卓案例:结合volley使用Gson
  11. Mac安装Redis
  12. 解决:Assign object to a variable before exporting as module default
  13. Vs2010创建网站
  14. 第一次创建STC15串口程序模板
  15. linux 设置色彩深度,wayland显示服务器,怎么把色彩深度设置成24位
  16. 折线图css,echarts实现折线图的代码(附图)
  17. Hark的数据结构与算法练习之插入排序
  18. 类似捕鱼达人的金币效果
  19. 解决: This Python interpreter is in a conda environment, but the environment has not been activat
  20. gym/101955/problem/E - The Kouga Ninja Scrolls 线段数 维护 切比雪夫距离 2018沈阳icpc

热门文章

  1. 黑苹果oc清除nvram_基于OpenCore0.6.1的黑苹果安装,小白也能看
  2. 关于51地图中循环根据经纬度获取地理位置只显示一条数据的问题
  3. 平面设计转UI设计难吗?
  4. 从零搭建基于 Java 的服务器生产环境
  5. UnityShader初级篇——渐变纹理
  6. 如何区分电脑上的硬件和软件?
  7. JAVA IO流(3)
  8. Mybatis-Plus进阶
  9. MATLAB 数据分析方法(第2版)2.3 数据变换
  10. 主板开启网络唤醒_网卡(网络)唤醒BIOS设置教程