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 相关文章推荐
Python2随机数列生成器简单实例
Sep 04 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python滑块验证码的破解实现
Nov 10 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
python利用platform模块获取系统信息
Oct 09 Python
Python类方法总结讲解
Jul 26 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执行速度全攻略(下)
2006/10/09 PHP
php 过滤危险html代码
2009/06/29 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
angular6的响应式表单的实现
2018/10/10 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
python生成词云的实现方法(推荐)
2017/06/13 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
pytorch 数据集图片显示方法
2018/07/26 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
python实现两张图片的像素融合
2019/02/23 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
优秀女职工事迹材料
2014/02/06 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
婚庆答谢词
2015/01/04 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技