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实现下载指定网址所有图片的方法
Aug 08 Python
Python制作爬虫抓取美女图
Jan 20 Python
简述Python2与Python3的不同点
Jan 21 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
使用pandas读取文件的实现
Jul 31 Python
python对csv文件追加写入列的方法
Aug 01 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
python实现在线翻译功能
Mar 03 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
Python-openCV开运算实例
Jul 05 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
教你漂亮打印Pandas DataFrames和Series
May 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
一个简单的PHP投票程序源码
2007/03/11 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
基于python socketserver框架全面解析
2017/09/21 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
会计专业毕业生自我评价
2013/09/25 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers