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专用方法与迭代机制实例分析
Sep 15 Python
python内存管理分析
Apr 08 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
使用python爬取B站千万级数据
Jun 08 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
对Python中plt的画图函数详解
Nov 07 Python
Python GUI编程完整示例
Apr 04 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 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
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
PHP二维数组去重算法
2016/12/17 PHP
js 操作css实现代码
2009/06/11 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
浅谈Django的缓存机制
2018/08/23 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
护理专业自荐书
2014/06/04 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
倡议书格式及范文
2015/04/29 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
Python 可迭代对象 iterable的具体使用
2021/08/07 Python