Python爬虫运用正则表达式的方法和优缺点


Posted in Python onAugust 25, 2019

前言

我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东西实现我的需求,学习了正则表达式之后,想着要感受一下它在爬虫里面的效果和优缺点。

目标:爬取Top100榜单上电影的封面图

Top100榜单规则:将猫眼电影库中的经典影片,按照评分和评分人数从高到低综合排序取前100名,每天上午10点更新。相关数据来源于“猫眼电影库”。

下面是我做的步骤:

(1)查看页面元素,找到包含图片的路径的代码段落

(2)分析图片在web上面的唯一属性,便于之后获取正确图片位置信息

(3)因为需要翻页,观察多个页面的URL变化

(4)综合以上几个点,编写合适的正则表达式

 1、python 标准库中re模块提供了正则表达式的全部功能,直接引入;requests模块是http库,爬虫常用库,而urllib.requests 则是最后用到写入文件的函数

import re
import requests
import urllib.request

2、先接收URL地址的HTML页面,然后转化为str形式(正则表达式是匹配字符串),第一个pattern1缩小范围,抓取目标部分,result1接收匹配的结果,这时候所有封面图地址就在里面了

response = requests.get(url)
response = str(response.content)
patttern1 = '<dl class="board-wrapper">.+?<div class="pager-main">'
result1 = re.compile(pat).findall(response)

3、第二个正则,匹配图片的地址信息

pat2 = '<img data-src="https://(.+?\.jpg)'
photos = re.compile(pat1).findall(re1[0])

这时候爬取到100张图的信息,如下图:

Python爬虫运用正则表达式的方法和优缺点

 4、继续下一步,把每张图片命名好,需要正确的图片地址,避免重复 

x = 1
for imgurl in name:
 imgname = 'D:/Top 100/'+str(i/10)+str(x)+'.jpg'
 imgurl = 'https://'+imgurl
 urllib.request.urlretrieve(imgurl,filename=imgname)
 x += 1

 5、最后一步了,因为需要翻页爬取,所以加了一个循环,10页内容爬取下来

for i in range(0, 100, 10):
  url = 'http://maoyan.com/board/4?offset='+str(i)
  get_one_page(url, i)
  #定义函数,多次调用

相对来说,这是一个很简单的应用,也是自己学习之后的实践,在这个例子中,我是用到正则表达式来实现的,还有其他方法,而且可能简单,比如BeautifulSoup,XPath等方法,用在更加复杂的爬虫项目里面,需要的知识更多,方法更严谨,还需学习学习!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python学习笔记:字典的使用示例详解
Jun 13 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
Python 多线程的实例详解
Sep 07 Python
python去掉空白行的多种实现代码
Mar 19 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
numpy求平均值的维度设定的例子
Aug 24 #Python
Python实现滑动平均(Moving Average)的例子
Aug 24 #Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 #Python
在Python3 numpy中mean和average的区别详解
Aug 24 #Python
Python绘制股票移动均线的实例
Aug 24 #Python
python+selenium 鼠标事件操作方法
Aug 24 #Python
python+selenium select下拉选择框定位处理方法
Aug 24 #Python
You might like
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php生成短网址示例
2014/05/05 PHP
深入理解PHP中的count函数
2016/05/31 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
用 Python 制作地球仪的方法
2020/04/24 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
物理学专业求职信
2014/07/04 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
投资入股协议书
2016/03/22 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL