目录

前言                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必看片迅雷种子相关推荐

  1. python小爬虫—抓取pixabay网站的图片资源

    这是一个免费下载图片的网站https://pixabay.com 这个网站有很多免费下载的图片我比较喜欢,一张一张下载我也懒得戳鼠标,所以我先搜索到我喜欢的图片分类,然后发现在doc里面的html文件 ...

  2. 抓取国家统计局网站上的最新县及县以上行政区划代码,并保存成json格式的文件

    源:http://www.oschina.net/code/snippet_120579_11434#18725 抓取国家统计局网站上的最新县及县以上行政区划代码,并保存成json格式的文件 可用于为 ...

  3. python正则匹配找到所有的浮点数_如何利用Python抓取静态网站及其内部资源

    遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观.由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的. 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来. ...

  4. Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】

    用python实现的抓取腾讯视频所有电影的爬虫 1. # -*- coding: utf-8 -*-2. import re3. import urllib24. from bs4 import Be ...

  5. 独家 | 手把手教你用Python进行Web抓取(附代码)

    作者:Kerry Parker 翻译:田晓宁 校对:丁楠雅 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我在工 ...

  6. 测试开发Python培训:抓取新浪微博抓取数据-技术篇

    测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的sele ...

  7. python爬虫(抓取百度新闻列表)

    一.python请求要抓取的url页面 要抓取的url http://news.baidu.com/ ,先python模拟请求该url #!/usr/bin/python # -*- coding:u ...

  8. 推荐 :手把手教你用Python进行Web抓取(附代码)

    作者:Kerry Parker :翻译:田晓宁:校对:丁楠雅: 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我 ...

  9. Python爬虫,抓取淘宝商品评论内容

    2019独角兽企业重金招聘Python工程师标准>>> 作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用pytho ...

最新文章

  1. Python中完整的机器学习数据科学课程
  2. 模型融合方法最全总结!
  3. 蓝桥杯 校门外面的树 (线段树,区间处理)
  4. OpenGL 纹理坐标的实例
  5. python按字节读取文件_Python读取二进制文件
  6. 如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC
  7. 身边的设计模式(一):单例 与 RedisCacheManager
  8. SVG 教程 (七)SVG 实例,SVG 参考手册
  9. java线程池读文件_多线程读取Java文件
  10. cojs 安科赛斯特 题解报告
  11. android sharedpreference 清空,Android 从SharedPreferences中存储,检索,删除和清除数据...
  12. Linux中find命令-path -prune用法详解
  13. python哪些模板引擎比较_3 个 Python 模板库比较
  14. 浙大翁凯老师Java课堂学习记录(第三周)
  15. 安全左中右·2022 XDR 网络安全运营新理念峰会圆满落幕
  16. 【Codeforces Round #695 (Div. 2) B】Hills And Valleys
  17. 常用邮箱大全,申请邮箱收费吗?邮箱活动有哪些?
  18. java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度
  19. IIS协议和UDA1341TS音频编解码芯片简述
  20. 用matlab解方程组例子,Matlab求解超定方程组实例

热门文章

  1. DIY组装人生第一台台式机(二)
  2. React中Immutable的使用
  3. mysql list集合查询_MyBatis 传入List集合作为条件查询数据
  4. 江西特色产业 国稻种芯·中国水稻节:新余农业高质高效生产
  5. 实验十三 流水线加法器
  6. html文字超出不换行,css文字超出不换行如何设置?
  7. 一条SQL更新语句的执行过程
  8. Mac数据恢复工具:Syncios Data Recovery
  9. EAC安装失败解决方法(Copy file failed with 32)
  10. java 百千万亿转换_一二三四五六七八九十百千万亿