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 Web开发框架Django
Jun 30 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
python检索特定内容的文本文件实例
Jun 05 Python
python使用knn实现特征向量分类
Dec 26 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
pytorch 自定义参数不更新方式
Jan 06 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
python基于pygame实现飞机大作战小游戏
Nov 19 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
php eval函数用法总结
2012/10/31 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
PHP实现的策略模式示例
2019/03/20 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python跨文件使用全局变量的实现
2020/11/17 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
预备党员入党思想汇报
2014/01/04 职场文书
12岁生日演讲稿
2014/05/14 职场文书
求职信怎么写
2014/05/23 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android