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线程池的实现实例
Nov 18 Python
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python实现购物系统(示例讲解)
Sep 13 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
python爬取网易云音乐评论
Nov 16 Python
Python 编程速成(推荐)
Apr 15 Python
python可视化实现KNN算法
Oct 16 Python
在python shell中运行python文件的实现
Dec 21 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
编写python代码实现简单抽奖器
Oct 20 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中接口与抽象类的区别
2013/06/08 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Python matplotlib可视化实例解析
2020/06/01 Python
浅析Python 多行匹配模式
2020/07/24 Python
python 代码运行时间获取方式详解
2020/09/18 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
德国旅游网站:weg.de
2018/06/03 全球购物
优秀学生获奖感言
2014/02/15 职场文书
财务简历的自我评价
2014/03/05 职场文书
借款协议书
2014/04/12 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
钱学森观后感
2015/06/04 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏