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和IPython中使用Docker
Apr 28 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
python 实现list或string按指定分段
Dec 25 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python利用platform模块获取系统信息
Oct 09 Python
Python importlib模块重载使用方法详解
Oct 13 Python
python获取命令行参数实例方法讲解
Nov 02 Python
python 使用openpyxl读取excel数据
Feb 18 Python
Python使用UDP实现720p视频传输的操作
Apr 24 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动态实现表格跨行跨列实现代码
2012/11/06 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
图片之间的切换
2006/06/26 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
layui清空,重置表单数据的实例
2019/09/12 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Python随手笔记之标准类型内建函数
2015/12/02 Python
python基础教程之五种数据类型详解
2017/01/12 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
django中ImageField的使用详解
2020/12/21 Python
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
新娘父亲婚礼致辞
2014/01/16 职场文书
幼儿园招生广告
2014/03/19 职场文书
静心口服夜广告词
2014/03/20 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
文明市民先进事迹
2014/05/15 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
个人四风对照检查材料
2014/09/26 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2014司机年终工作总结
2014/12/05 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js