07. 实战:Python正则法抓取某网站2022必看片迅雷种子
目录
前言 URL(在评论区)URL(在评论区)URL(在评论区)
目的 URL(在评论区)URL(在评论区)URL(在评论区)
思路 URL(在评论区)URL(在评论区)URL(在评论区)
代码实现
第一步,先导包
第二步,请求源代码
第三步,debug第二步
第四步,正则法定位信息
第五步,访问提取子页面内容
完整代码
运行结果
总结
前言
上一节我们讲到了Python正则法抓取某电影网Top250信息,
这一节再进行一个简单的正则法抓取例子:抓取某网站的迅雷种子资源!
目的
获取某网站中2022必看片榜单中所有电影的片名与对应迅雷种子
思路
1. 定位到2022必看片
2. 从2022必看片中提取子页面的链接地址
3. 请求子页面的链接地址,拿到我们想要的下载地址
代码实现
第一步,先导包
import reimport requests
复习一下,re库就是Regular Expression,即Python的正则库,用于数据分析。requests库是我们请求网页所用的库。
第二步,请求源代码
domain = "见评论区" # domain就是url,换了个说法
resp = requests.get(domain) # 如果报错,可能是http's'的问题。那么就需要加一个参数' verify = False ',不进行安全校验
print(resp.text)
这里可能出现两个问题:
1. resp报错,这里可能是http's'的问题,https和http的区别就在于是否进行安全校验。我们访问https网页如果报错,那就在requests.get()中添加参数verify=False,就可以跳过安全校验步骤了
2. print网页源代码时我们发现,涉及到中文的时候打印出了乱码,这个时候我们要敏锐的感觉到一定是编码方式的问题!html默认的编码方式和PyCharm是一致的,都是UTF-8。但是此时出现了乱码我们就要去寻找这个网页的编码方式有何不同。
第三步,debug第二步
1. 修改resp行函数为
resp = requests.get(domain, verify=False)
2. 观察发现网页源代码的头部标签中规定了此网页的编码方式:
<META http-equiv=Content-Type content="text/html; charset=gb2312">中charset=gb2312,所以我们应该采用gb2312编码。
注:如果想了解更多关于HTML头部标签的知识,请访问HTML头部
resp.encoding = 'gb2312' # 指定字符集
print(resp.text)
resp.close()
此时再打印源代码就不会出现乱码了
第四步,正则法定位信息
1. 先检查页面源代码定位
可以观察到,从<ul>开始,每一个<li>中 包含我们对应的资源名称和链接,这正是我们需要的。
其实, <ul>指的是无序列表,而每一个<li>代表无序列表中的每一个列表项;<div>是浏览器的块级元素,表达这一部分是一个整体。如果想了解更多关于HTML列表和HTML块级元素的知识,请点击下面的超链接
HTML列表 HTML块级元素
2. 正则法定位上述源代码
# 定位成功
obj1 = re.compile(r"2022必看热片.*?<ul>(?P<ul>.*?)</ul>", re.S)
result1 = obj1.finditer(resp.text)
for it in result1:ul = it.group('ul')# print(ul)
我们还是用惰性搜索拿出了中间一大堆<li>包裹的信息,还是很准确的,但是我们不能直接把这个拿来用,我们要进行重定位,把信息细节提取出来,不要其余多余的代码
3. 再次正则,拿出想要的信息
# html中,a标签表示超链接,点击对应的对象就会跳转到href引用的链接中,title是鼠标选中以后浮现出的提示文字,主要需要href中的子页面链接
# 提取子页面链接
obj2 = re.compile(r"<a href='(?P<href>.*?)'", re.S)
result2 = obj2.finditer(ul)
child_href_list = []
for i in result2:href = i.group('href')# 拼接子页面url地址:域名+子页面地址(这里多了一个斜杠,要strip掉)child_href = domain + href.strip("/")# print(child_href) # 为了方便,把它们装进列表里child_href_list.append(child_href) # 把子页面链接保存起来# 37 + 38 = child_href_list = [child_href]# child_href_list = [child_href]
这里<a>标签就是表示超链接,herf元素的含义就是引用子链接,是基于当前域名添加路径定位到我们需要的位置。所以我们需要把之前代码中写到的域名domain和子页面地址拼接起来。
打印出来发现链接多了一个斜杠,我们使用strip函数去掉,然后递归地保存到列表中就好了。
关于超链接<a>的知识请访问HTML链接
第五步,访问提取子页面内容
源代码90行开始出现了我们需要的信息,如图所示
# 提取子页面内容
obj3 = re.compile(r'◎片 名(?P<moviename>.*?)<br />.*?<td 'r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">', re.S)
for href in child_href_list:child_resp = requests.get(href)child_resp.encoding = 'gb2312'# print(child_resp.text)result3 = obj3.finditer(child_resp.text)for j in result3:moviename = j.group("moviename")download = j.group("download")print(moviename)print(download)# break # 测试用
child_resp.close()
根据已知信息,写出正则表达式,进行预处理,拿到片名和迅雷种子。
之后进行递归,把子页面列表中的链接都遍历一遍,就得到了2022必看榜单片名及种子了。
完整代码
# 思路:
# 1.定位到2022必看片
# 2.从2022必看片中提取子页面的链接地址
# 3.请求子页面的链接地址,拿到我们想要的下载地址。(迅雷种子)
import reimport requestsdomain = "见评论区" # domain就是url,换了个说法
resp = requests.get(domain, verify=False) # 如果报错,可能是http's'的问题。那么就需要加一个参数' verify = False ',不进行安全校验
# print(resp.text) # 中文编码默认是utf-8,但是test出现乱码,说明编码方式出现问题
# 观察发现<META http-equiv=Content-Type content="text/html; charset=gb2312">中charset=gb2312,所以采用gb2312编码
resp.encoding = 'gb2312' # 指定字符集
# print(resp.text)
resp.close()# 定位成功
obj1 = re.compile(r"2022必看热片.*?<ul>(?P<ul>.*?)</ul>", re.S)
result1 = obj1.finditer(resp.text)
for it in result1:ul = it.group('ul')# print(ul)# html中,a标签表示超链接,点击对应的对象就会跳转到href引用的链接中,title是鼠标选中以后浮现出的提示文字,主要需要href中的子页面链接
# 提取子页面链接
obj2 = re.compile(r"<a href='(?P<href>.*?)'", re.S)
result2 = obj2.finditer(ul)
child_href_list = []
for i in result2:href = i.group('href')# 拼接子页面url地址:域名+子页面地址(这里多了一个斜杠,要strip掉)child_href = domain + href.strip("/")# print(child_href) # 为了方便,把它们装进列表里child_href_list.append(child_href) # 把子页面链接保存起来# 37 + 38 = child_href_list = [child_href]# child_href_list = [child_href]# 提取子页面内容
obj3 = re.compile(r'◎片 名(?P<moviename>.*?)<br />.*?<td 'r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">', re.S)
for href in child_href_list:child_resp = requests.get(href)child_resp.encoding = 'gb2312'# print(child_resp.text)result3 = obj3.finditer(child_resp.text)for j in result3:moviename = j.group("moviename")download = j.group("download")print(moviename)print(download)# break # 测试用
child_resp.close()
运行结果
可以看到片名和迅雷种子都成功提取了,完成!
总结
我们今天又用正则法爬取2022必看电影名和其迅雷下载链接,再次锻炼了re模块的使用方法。下一期我们将简要介绍一下HTML语法,方便我们今后bs4和xpath的学习。关于 HTML教程我主页已经有一个专栏供大家学习了,这里放个传送门HTML教程
07. 实战:Python正则法抓取某网站2022必看片迅雷种子相关推荐
- python小爬虫—抓取pixabay网站的图片资源
这是一个免费下载图片的网站https://pixabay.com 这个网站有很多免费下载的图片我比较喜欢,一张一张下载我也懒得戳鼠标,所以我先搜索到我喜欢的图片分类,然后发现在doc里面的html文件 ...
- 抓取国家统计局网站上的最新县及县以上行政区划代码,并保存成json格式的文件
源:http://www.oschina.net/code/snippet_120579_11434#18725 抓取国家统计局网站上的最新县及县以上行政区划代码,并保存成json格式的文件 可用于为 ...
- python正则匹配找到所有的浮点数_如何利用Python抓取静态网站及其内部资源
遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观.由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的. 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来. ...
- Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】
用python实现的抓取腾讯视频所有电影的爬虫 1. # -*- coding: utf-8 -*-2. import re3. import urllib24. from bs4 import Be ...
- 独家 | 手把手教你用Python进行Web抓取(附代码)
作者:Kerry Parker 翻译:田晓宁 校对:丁楠雅 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我在工 ...
- 测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的sele ...
- python爬虫(抓取百度新闻列表)
一.python请求要抓取的url页面 要抓取的url http://news.baidu.com/ ,先python模拟请求该url #!/usr/bin/python # -*- coding:u ...
- 推荐 :手把手教你用Python进行Web抓取(附代码)
作者:Kerry Parker :翻译:田晓宁:校对:丁楠雅: 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我 ...
- Python爬虫,抓取淘宝商品评论内容
2019独角兽企业重金招聘Python工程师标准>>> 作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用pytho ...
最新文章
- Python中完整的机器学习数据科学课程
- 模型融合方法最全总结!
- 蓝桥杯 校门外面的树 (线段树,区间处理)
- OpenGL 纹理坐标的实例
- python按字节读取文件_Python读取二进制文件
- 如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC
- 身边的设计模式(一):单例 与 RedisCacheManager
- SVG 教程 (七)SVG 实例,SVG 参考手册
- java线程池读文件_多线程读取Java文件
- cojs 安科赛斯特 题解报告
- android sharedpreference 清空,Android 从SharedPreferences中存储,检索,删除和清除数据...
- Linux中find命令-path -prune用法详解
- python哪些模板引擎比较_3 个 Python 模板库比较
- 浙大翁凯老师Java课堂学习记录(第三周)
- 安全左中右·2022 XDR 网络安全运营新理念峰会圆满落幕
- 【Codeforces Round #695 (Div. 2) B】Hills And Valleys
- 常用邮箱大全,申请邮箱收费吗?邮箱活动有哪些?
- java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度
- IIS协议和UDA1341TS音频编解码芯片简述
- 用matlab解方程组例子,Matlab求解超定方程组实例