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中实现两个字典(dict)合并的方法
Sep 23 Python
讲解Python中的标识运算符
May 14 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
django-allauth入门学习和使用详解
Jul 03 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
python实现交并比IOU教程
Apr 16 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Python列表推导式实现代码实例
Sep 09 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
关于Python错误重试方法总结
Jan 03 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
10条php编程小技巧
2015/07/07 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
vscode调试node.js的实现方法
2020/03/22 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
Python itertools模块详解
2015/05/09 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
简单的JAVA编程面试题
2013/03/19 面试题
旅游安全协议书
2014/04/21 职场文书
公司员工活动策划方案
2014/08/20 职场文书
校园安全广播稿范文
2014/09/25 职场文书
2016年公司新年寄语
2015/08/17 职场文书
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js