增量爬取电影网站2级详情页面电影名称和下载链接
增量爬取电影网站2级详情页面电影名称和下载链接
- 需求
- 步骤
需求
一级页面抓取:电影详情页链接
二级页面抓取:电影名称和电影下载链接
增量获取:网站中电影资源后将更新的数据爬取下来
步骤
- 确定响应内容中是否存在所需抓取数据(是否为静态页面):看是否能在源代码中搜到关键词
- 找url规律
一级页面url规律:
第n页:https://www.dytt8.net/html/gndy/dyzz/list_23_n.html - 根据页面元素写正则
//一级页面正则
<table width="100%".*?<td width="5%".*?<a href="(.*?)".*?ulink">.*?</table>
//二级页面正则
<div class="title_all"><h1><font color=#07519a>(.*?)</font></h1></div>.*?<td style="WORD-WRAP.*?>.*?>(.*?)</a>
- 爬虫程序
- 多级页面抓取思路:
先写1,2级页面通用的功能函数
然后依次做1,2级页面该做的事
最后设置增量抓取,将数据存入mysql数据库
- 多级页面抓取思路:
from urllib import request
import re
import time
import random
from fake_useragent import UserAgent
import pymysql
from hashlib import md5
import sysclass FilmSkySpider(object):def __init__(self):self.url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'#连接Mysql,数据表为filmdbself.db = pymysql.connect('localhost','root','123456','filmskydb',charset='utf8')#创建游标self.cursor = self.db.cursor()#多级页面获取,先封装通用函数#功能函数1:获取htm的函数def get_html(self,url):headers = {'User=Agent':UserAgent().random}req = request.Request(url=url,headers=headers)#向网站发起请求并获取响应resp = request.urlopen(req)#读取响应,将传输的字节串转为字符串html = resp.read().decode('gb18030','ignore') #这网站是GBK的,用gb18030是因为它能识别的最多,其他的还有gb2312,gbk,只能做到gb18030,如果还有解码错误的,用'ignore'表示忽略掉解码错误return html#功能函数2:re匹配出数据def parse_func(self,re_bds,html):p = re.compile(re_bds,re.S)r_list = p.findall(html)return r_list#解析提取所有需求数据def parse_html(self,one_url):#提取一级页面所需:二级页面链接#获取一级页面htmlone_html = self.get_html(one_url)#用re解析一级页面html得到链接,格式为['/html/xxx','/html/xxx','']re_dbs = '<table width="100%".*?<a class="ulink" href="(.*?)">.*?</table>'href_list = self.parse_func(re_dbs,one_html)#for循环一页一页提取二级页面数据for href in href_list:#拼出二级页面链接link = 'https://www.dytt8.net' + href#将链接用md5加密,转为fingers = md5()s.update(link.encode())finger = s.hexdigest()#若数据库中没有finger,表示网页中数据更新,抓if not self.is_go_on(finger):#向详情页发请求,提取名字和下载链接,将这个功能封装成函数self.parse_two_page(link)#抓取一个电影的所需信息后,休眠time.sleep(random.randint(1,2))#抓完后将finger存入request_finger表中ins = 'insert into request_finger value(%s)'self.cursor.execute(ins,[finger])self.db.commit()#网页数据未有更新,无需抓取,退出进程else:sys.exit('完成')#到指纹表request_finger中查看是否存在该fingerdef is_go_on(self,finger):sel = 'select finger from request_finger where finger=%s'result = self.cursor.execute(sel,[finger])#数据库中已有该finger时,返回给调用函数Trueif result:return True#解析提取二级页面数据具体的函数def parse_two_page(self,link):#获取二级页面htmltwo_html = self.get_html(link)#用re匹配二级页面html,格式为r_list:[(电影名称,下载链接)]re_bds = '<div class="title_all"><h1><font color=#07519a>(.*?)</font></h1></div>.*?<td style="WORD-WRAP.*?>.*?>(.*?)</a>'r_list = self.parse_func(re_bds,two_html)#将数据拼接成字典,以防有些网站故意做不同格式的标签断掉我的re(list返回空),为了防止程序断掉,用if r_list忽略为空的情况if r_list:item = {}item['name'] = r_list[0][0].strip()item['download'] = r_list[0][1].strip()print(item)#将二级页面所需数据存入数据表filmtabins = 'insert into filmtab value(%s,%s)'L = [item['name']],item['download']self.cursor.execute(ins,L)self.db.commit()#入口函数def run(self):for i in range(1,205): #一共204页#拼接urlone_url = self.url.format(i)#调用解析,提取数据的函数self.parse_html(one_url)if __name__ == '__main__':spider = FilmSkySpider()spider.run()
增量爬取电影网站2级详情页面电影名称和下载链接相关推荐
- 爬取国家药品监督管理局详情页面信息
学习链接b站:https://www.bilibili.com/video/BV1Yh411o7Sz?p=11 import requests import jsonurl = 'http://scx ...
- scrapy过滤重复数据和增量爬取
原文链接 前言 这篇笔记基于上上篇笔记的---<scrapy电影天堂实战(二)创建爬虫项目>,而这篇又涉及redis,所以又先熟悉了下redis,记录了下<redis基础笔记> ...
- 爬虫概念与编程学习之如何爬取视频网站页面(三)
先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二) 不多说,直接上代码. 编写代码 运行 <! ...
- python壁纸数据抓取_python 多线程爬取壁纸网站的示例
基本开发环境 ・ Python 3.6 ・ Pycharm 需要导入的库 目标网页分析 网站是静态网站,没有加密,可以直接爬取 整体思路: 1.先在列表页面获取每张壁纸的详情页地址 2.在壁纸详情页面 ...
- Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)
Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...
- Scrapy翻页爬取示例——列表页、详情页
Scrapy翻页爬取示例--列表页.详情页 引言: 本人最近在帮助同事们爬取一批英-泰双语数据,顺带复习了一下scrapy爬虫相关的知识.下面以简单的小项目为例,一起来开始吧! 示例一:爬取列表页 本 ...
- 爬虫爬取二次元网站美女图片
爬虫爬取二次元网站美女图片 前言 xpath解析 需求分析 代码编写 总代码 前言 本次需要爬取二次元网站cos板块下的图片 需要用到request模块与lxml模块,所以请提前安装好这两个模块,打开 ...
- 爬取京东网站前后一星期的笔记本电脑信息并可视化
分析我们需要爬取的网站,发现京东网页只需通过keyword和page就可正常访问,且page的数值是奇数 爬取思路 首先获取一百页的商品信息,再在每一页中获取商品详情页的链接,并将每一个商品的店铺名获 ...
- python爬虫——爬取淘票票正在热映电影
今天正好学习了一下python的爬虫,觉得收获蛮大的,所以写一篇博客帮助想学习爬虫的伙伴们. 这里我就以一个简单地爬取淘票票正在热映电影为例,介绍一下一个爬虫的完整流程. 首先,话不多说,上干货--源 ...
最新文章
- 大数据时代的网络视频营销
- 【划分树+二分】HDU 4417 Super Mario
- Java将Long类型转换为时分秒
- Java iText PDF:用 iText 包生成简单的 pdf 文件
- 服务器子系统是什么,服务器是什么样子的,服务器一般用什么系统!
- SAP Fiori + Vue = ? 1
- 第三方登录 人人php,人人网第三方登录接口方案
- SYSU每周一赛(13.03.16)1003
- 辞去美国终身教职!顶尖学者,加盟“双一流”高校
- java se入门_java SE 入门之运算符(第三篇)
- pid调节软件_(四)差分底盘设计——5.底盘PID控制参数整定
- JsonCpp常见用法
- 手机无启动抓拍的想法
- Java周记(第五周)
- 概率论与数理统计思维导图_“我更强调统计学的思维”——专访北京师范大学未来教育学院李勇教授...
- ArcGIS软件操作问题及解决方法总结
- 有限维空间上的线性算子
- 如何搭建一个属于自己的在线wiki文档系统?
- 百度、腾讯、搜狐、360等产品职位笔试智力题分析
- android logo制作教程视频,Android的APP怎样制作LOGO的尺寸