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 break语句详解
Mar 11 Python
详解Django框架中的视图级缓存
Jul 23 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python Celery多队列配置代码实例
Nov 22 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
基于Django集成CAS实现流程详解
Nov 28 Python
python+opencv实现视频抽帧示例代码
Jun 11 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
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
python/golang 删除链表中的元素
2020/09/14 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
检举信的格式及范文
2014/04/04 职场文书
茶花女读书笔记
2015/06/29 职场文书
早恋主题班会
2015/08/14 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫