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 性能优化方法小结
Mar 31 Python
django框架如何集成celery进行开发
May 24 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
python列表使用实现名字管理系统
Jan 30 Python
python把转列表为集合的方法
Jun 28 Python
pywinauto自动化操作记事本
Aug 26 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
Python爬虫之爬取最新更新的小说网站
May 06 Python
浅谈Python中的正则表达式
Jun 28 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 magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
一端时间轮换的广告
2006/06/26 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python之py2exe打包工具详解
2017/06/14 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
家长评语和期望
2014/02/10 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书