1. 第三方库

爬虫基本都会用到的第三方库:

  1. requests,优雅而简单的HTTP库,主要作用是模仿浏览器请求,获取爬取页面的HTML文件,给BeautifulSoup4用。
  2. BeautifulSoup4,可以从HTML或XML文件中提取数据,可以快速上手使用。

2. 网页分析

我的理解,爬虫一定是根据爬取网页的HTML编写代码,分析你要爬取的内容在HTML的哪个标签中,这个标签跟其他标签有什么不同之处,比如属性不同,属性值不同等。需要稍微了解一些基础的HTML、CSS语法,只是基本了解即可。
我们爬取电影天堂中最新电影这个子版块。用requests获取到最新电影版本的HTML文件,交给BeautifulSoup解析。

通过查看HTML源码,我们可以发现所有最新发布电影的连接都在ul标签中的table标签里。取出a标签中href属性的值,这个就是电影的详情页面URL。我们取到这个URL后,就可以用requests来请求这个页面的HTML文件,然后继续用BeautifulSoup解析,获取电影的下载地址。

在电影的详情页面,我们关注的是迅雷下载地址,查看HTML网页元素,找到这个下载地址所在的标签,仍然通过BeautifulSoup来解析href值。这个就是该电影的迅雷下载地址了。
上述就是整个爬虫的思路。爬取其他网站,也是同样的方法。

3. 参考代码

我把代码中print方法删了,在你需要的地方自行添加print吧,或者直接用Pycharm打断点查看变量也很方便直观。

# -*- coding: utf-8 -*-import requests
import urllib3
from bs4 import BeautifulSoup, SoupStrainer
import re
import json
from datetime import date, datetime, timedelta# InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.
# See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)class DyttSpider :def __init__(self) :# 电影天堂主页,用于后续拼接URLself.__index_url = 'https://www.dygod.net'# 电影天堂最新电影页面self.__new_film_page_url = 'https://www.dygod.net/html/gndy/dyzz/index.html'self.__headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.99 Safari/537.36 Vivaldi/2.9.1705.41'}self.__new_film_detail_url = list()self.__new_film_download_url = list()self.__query_date = date.today() - timedelta(days = 1)def __is_query_publish_day(self, str_date) :"""是否满足发布的日期"""query_date = datetime.strptime(str_date, '%Y-%m-%d').date()return True if self.__query_date == query_date else Falsedef __get_new_film_detail_url(self) :response = requests.get(url = self.__new_film_page_url, headers = self.__headers, verify = False)# response.encoding = requests.utils.get_encodings_from_content(response.text)# 中文乱码,GB2312无效response.encoding = 'GBK'# 加快爬取速度,只分析关注部分parse_only = SoupStrainer('div', attrs = {'class' : 'co_content8'})soup = BeautifulSoup(response.text, 'html.parser', parse_only = parse_only)table_tags = soup.find_all("table", attrs = {'class' : 'tbspan'}, recursive = True)for table_tag in table_tags :# 正则表达式匹配电影下载的发布日期publish_date = re.search('\d{4}-\d{1,2}-\d{1,2}', table_tag.find('font', attrs = {'color' : '#8F8C89'}).string)# publish_date = re.search('\d{4}-\d{1,2}-\d{1,2}', '日期:2019-12-25')if not publish_date or not self.__is_query_publish_day(publish_date.group(0)) :continuelink_tag = table_tag.find('a')if link_tag.get('title') and link_tag.get('href') :self.__new_film_detail_url.append({'data'  : publish_date[0],'title' : link_tag.get('title'),'link'  : self.__index_url + link_tag.get('href')})def __get_new_film_download_url(self) :for film_detail in self.__new_film_detail_url :response = requests.get(url = film_detail['link'], headers = self.__headers, verify = False)# response.encoding = requests.utils.get_encodings_from_content(response.text)# 中文乱码,GB2312无效response.encoding = 'GBK'# 加快爬取速度,只分析关注部分parse_only = SoupStrainer('div', attrs = {'class' : 'co_content8'})soup = BeautifulSoup(response.text, 'html.parser', parse_only = parse_only)table_tags = soup.find_all("table", recursive = True)downloads = list()for table_tag in table_tags :downloads.append(table_tag.find('a').get('href'))self.__new_film_download_url.append({'data'  : film_detail['data'],'title' : film_detail['title'],'link'  : downloads})def spider(self) :self.__get_new_film_detail_url()self.__get_new_film_download_url()if __name__ == '__main__' :dytt_spider = DyttSpider()dytt_spider.spider()

打印self.__new_film_download_url这个变量值,是如下的结构:

[
{
“data”: “2020-01-12”,
“title”: “一月经典意大利9.3分剧情片《海上钢琴师》BD英意双语中英双字”,
“link”: [
“magnet:?xt=urn:btih:d11ab04bd6d5f6ca10d119b660638c1e9f4011bf&dn=[电影天堂www.dytt89.com]海上钢琴师BD英意双语中英双字.mp4”
]
},
{
“data”: “2020-01-12”,
“title”: “2019年中美7.8分战争历史片《决战中途岛》HD国语中字”,
“link”: [
“magnet:?xt=urn:btih:9b47724df2ce45a23cd867a1ad926eed51a5ed36&dn=[电影天堂www.dytt89.com]决战中途岛HD国语中字.mp4”
]
}
]

4. 后续完善

  1. 是否可以将爬取到的下载地址直接发送到指定的邮箱里呢?当然是可以的。可以参考我之前写的另一篇博客《Python通过SMTP协议使用QQ邮箱发送邮件》。这样,如果网站每天都有更新,你的邮箱每天都会收到一封邮件啦。
  2. 每次都要手动执行脚本,太麻烦了,可以让这个脚本每天都自己执行吗?也是可以的,可以看看这个第三方库APScheduler,全称是Advanced Python Scheduler,一个轻量级的 Python 定时任务调度框架。

郑重说明

本文只限技术交流,请在法律允许的范围内合法爬虫!

Python爬取电影天堂最新发布电影下载地址相关推荐

  1. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  2. Python爬取豆瓣正在上映的电影

    Python爬取豆瓣正在上映的电影 #爬取豆瓣正在上映的电影 import requests from lxml import etree #1.将目标从网站上的页面抓取下来 headers = {' ...

  3. 使用Python爬取不同类别的豆瓣电影简介

    使用Python爬取不同类别的豆瓣电影简介 之前做过一点文本分类的工作,从豆瓣上爬取了不同类别的数千条电影的简介. 爬取目标 我们爬取的目标是 豆瓣影视,打开豆瓣网,随便点击一部电影,即可看到电影的介 ...

  4. Python爬取南京地铁微博发布客流数据并进行分析

    Python爬取南京地铁微博发布客流数据并进行分析 之前在网上看到了分析北京地铁客流数据的开源项目,就想试着分析一下南京地铁的客流数据,可是找了很久没有找到可以获得南京地铁客流数据的接口,就去南京地铁 ...

  5. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

  6. [爬虫]Python爬取网易云音乐搜索并下载歌曲!

    Python爬取网易云音乐搜索并下载歌曲! 文章目录 Python爬取网易云音乐搜索并下载歌曲! 1.准备工作 2."实地"观察 3.开始码代码! 4.搜索并下载 结束语 1.准备 ...

  7. Python爬取QQ音乐url及批量下载

    QQ音乐还是有不少的好音乐,有些时候想要下载好听的音乐,如果在网页下载都是还需要登录什么的.于是,来了个QQmusic的爬虫.至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在url吧. 参考 ...

  8. python怎么爬取一个网页图片显示不出来_使用python爬取网页,获取不到图片地址【python 爬取图片教程】...

    python 网络爬虫,怎么自动保存图片 f12找啊 使用python爬取网页,获取不到图片地址 大图片是在点击之后用 JS 控制加载的. 你可以看看 js/js.js 这个文件,253 行:func ...

  9. python程序爬电影_Python爬取电影天堂最新发布影片消息

    从今天开始我会把我学习python爬虫的一些心得体会和代码发布在我现在的博客,好记性不如烂笔头,以便以后的我进行复习. 虽然我现在的爬虫还很幼小,希望有一天她能长得非常非常的强大. --------- ...

  10. python爬取猫眼正在热映电影

    用python写爬虫爬取需要的数据比较容易,以Python简洁的语法和一大波成熟的库,写起来相当的快 python的版本以及使用的库 Python 3.6.4 requests lxml 这次主要是爬 ...

最新文章

  1. 【组队学习】【26期】图神经网络
  2. 年末将至,值得你关注的16个Java 开源项目!
  3. LeNet试验(五)观察“彩票假说”现象
  4. java日志框架log4j详细配置及与slf4j联合使用教程
  5. YAML基础知识及搭建一台简洁版guestbook
  6. oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
  7. 前端javascript知识(二)
  8. Hive:hive is not allowed to impersonate anonymous
  9. java程序中单方法接口通常是,Java基础知识整理
  10. HDU4612+Tarjan缩点+BFS求树的直径
  11. c语言英美姓名,英美常用人名——C-D
  12. Excel 快速填充空白
  13. python声音报警_python:基于tkinter打造的股票实时监控声音报警器! 自动监控,声音警报...
  14. Axure8.0使用教程
  15. 复现 ASPCMS企业建站系统Cookies欺骗漏洞
  16. LTE核心网中,SGW、PGW、PCRF都有计费的功能,请问这几个网元的计费功能有什么区别与联系呢?...
  17. 《德鲁克管理思想精要》读书笔记5 - 人事、创新、创业
  18. 太阳能电池板自动清洗机器人的制作分享
  19. ffmpeg 多视频 画中画
  20. 基于小波精英解学习和多角度搜索的新型阴阳平衡优化算法

热门文章

  1. 浅谈一下pyd文件的逆向
  2. linux下调用pyd文件,linux pyd
  3. KTL 一个支持C++14编辑公式的K线技术工具平台 - 第五版,支持sqlite3,全新sqlite3zz语法超简单使用sqlite3; 添加方差等统计函数。
  4. 计算机xp系统ie8,WinXP系统IE8安装失败的解决方法
  5. 【Redis】Redis缓存穿透和雪崩
  6. Windows11 下屏幕亮度自动调整的问题解决
  7. Apache RocketMQ 在阿里云大规模商业化实践之路
  8. katacontainers v2编译
  9. 中国首善刘强东出手了!给京东高管降薪,给普通员工提高福利!并拿出100亿保障”兄弟“基础住房...
  10. 寒山是一位高僧,拾得是一位和尚。