[爬虫]3.数据解析及应用 之 正则表达式【爬取网页所有图片】
回顾,上节课我们学了什么?
response=requests.get(url,params,headers)
response=requests.post(url,data,headers)
URL参数
UA伪装
F12抓包工具的爬取Ajax局部页面的请求
json数据格式的保存
前言:这篇文章是我第二次重写了,由于爬取了付费网站的图片教学,被官方版权警告,所以有一句名言说“爬虫爬的好,牢饭少不了”,大家使用爬虫千万要谨言慎行
目录
回顾,上节课我们学了什么?
1.聚焦爬虫:爬取页面中指定的页面内容。
2.编码流程:
3.数据解析方式分类:
4.数据解析原理概述:
5.正则表达式 数据解析应用
1.获取一张图片
2.通过正则表达式爬取页面的所有图片
3.爬取可翻页网站的所有图片
总结,这节课学了什么?
1.聚焦爬虫:爬取页面中指定的页面内容。
2.编码流程:
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
3.数据解析方式分类:
- 正则表达式正则表达式的语法汇总_神奇洋葱头的博客-CSDN博客_正则表达式 结束符
- bs4模块
- xpath模块
4.数据解析原理概述:
解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储,列如图片在<img>标签中,列表数据在<li>标签中
-1.进行指定标签的定位
-2.标签或者标签对应的属性中存储的数据值进行提取(解析)
5.正则表达式 数据解析应用
1.获取一张图片
热门表情_发表情,表情包大全fabiaoqing.com
每个图片右击就会出现“复制图片地址选项”,将进入图片地址(即向该地址发送get请求)就能得到该图片。
因此回顾上节课内容,简单的爬取一张
#2.1
import requests# 指定图片网址url url = "http://tva3.sinaimg.cn/bmiddle/0085wA6egy1h4h85lyscxj30j60j6mzh.jpg"# UA伪装 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0", }# 发起请求 r = requests.get(url=url, headers=headers) r_con=r.content#转化为二进制格式 图片#持久化存储,os库读写文件 with open( "pic.jpg", "wb") as f:#wb二进制方式打开文件f.write(r_con)f.close()
结果:
2.通过正则表达式爬取页面的所有图片
表情包网址:热门表情_发表情,表情包大全fabiaoqing.com
#正则匹配
import re
list=re.findall(pattern,string,flags)
list:匹配的字符串列表
pattern:正则表达式
string:匹配的字符串
flags:匹配模式- re.M :多行匹配
- re.S :单行匹配 如果分行则显示/n
- re.I : 忽略大小写
- re.sub(正则表达式, 替换内容, 字符串)当设置成re.S之后,可以简单理解为:. 可以匹配换行符,所以 . 可以匹配所有字符
(1)查看页面格式,找到图片标签
打开F12控制台管理器,通过鼠标移动点击标签找到图片的标签
(2)仔细分析图片标签特点,找到图片地址
可以看到这些图片的img的class标签一致,可以作为正则表达式的筛选条件
图片格式如下html
<a href="/biaoqing/detail/id/683557.html" title="假期来了鼠不尽的欢乐">
<img class="ui image lazy" data-original="http://tva3.sinaimg.cn/bmiddle/ceeb653ely8h6osu8twngg20fc0ejqby.gif" src="http://tva3.sinaimg.cn/bmiddle/ceeb653ely8h6osu8twngg20fc0ejqby.gif" title="假期来了鼠不尽的欢乐" alt="假期来了鼠不尽的欢乐" style="max-height: 188px; margin: 0px auto; display: block;">
</a>
其中data-original描述的是图片地址,需要我们用正则表达式获取
开始:
#2.2
import requests import re import os #创建放图片的文件夹 if not os.path.exists("./picLib"):os.mkdir("./picLib") # 指定网址url url = "https://fabiaoqing.com/biaoqing" # UA伪装 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0", } # 通用爬虫对页面提取 text = requests.get(url=url, headers=headers).text # 聚焦爬虫爬取img标签的图片#正则表达式 ex='<img class="ui image lazy" data-original="(.*?)" src.*?</a>' pic_list=re.findall(ex,text,re.S) print(pic_list) for picurl in pic_list:#发起请求获取每一张图片picdata=requests.get(picurl,headers).content#二进制picname=picurl.split('/')[-1]#从后面切割遇到第一个/为止,作为图片名picpath="./picLib/"+picname#保存图片with open(picpath,'wb') as f:f.write(picdata)print("已保存"+picname)
结果:
3.爬取可翻页网站的所有图片
上面案例只是爬取了首页的图片,针对于翻页,还需要继续补充
图库:热门表情_发表情,表情包大全fabiaoqing.com
(1)和上一个例子一样,查看图片的标签格式不再多叙
<a href="/biaoqing/detail/id/683557.html" title="假期来了鼠不尽的欢乐">
<img class="ui image lazy" data-original="http://tva3.sinaimg.cn/bmiddle/ceeb653ely8h6osu8twngg20fc0ejqby.gif" src="http://tva3.sinaimg.cn/bmiddle/ceeb653ely8h6osu8twngg20fc0ejqby.gif" title="假期来了鼠不尽的欢乐" alt="假期来了鼠不尽的欢乐" style="max-height: 188px; margin: 0px auto; display: block;">
</a>
(2)点击翻页,查看变化特点
发现仅仅是网址有规律的发生了改变,比较简单。如果在其他网站遇到网址.html之前的没有发生变化,但可以翻页,说明是局部页面刷新,需要通过上节课讲的F12抓包工具进行分析,找到翻页的Ajax请求,模拟发送翻页请求就行。
当然,这个网站不是局部页面刷新,仅仅是网址有规律变化,字符串拼接网址就行。
#2.3
import requests import re import os #创建放图片的文件夹 if not os.path.exists("./picLib"):os.mkdir("./picLib") star=eval(input("输入起始图片页:")) end=eval(input("输入终止图片页:")) piclists=[]#所有图片的地址集合 for i in range(star,end+1):# 指定网址urlurl = "https://fabiaoqing.com/biaoqing/lists/page/"+str(i)+".html"# UA伪装headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0",}# 通用爬虫对页面提取text = requests.get(url=url, headers=headers).text# 聚焦爬虫爬取img标签的图片#正则表达式ex='<img class="ui image lazy" data-original="(.*?)" src.*?</a>'pic_list=re.findall(ex,text,re.S)piclists+=pic_list for picurl in piclists:#发起请求获取每一张图片picdata=requests.get(picurl,headers).content#二进制picname=picurl.split('/')[-1].split("!")[0]#从后面切割遇到第一个/为止,再将!切去picpath="./picLib/"+picname#保存图片with open(picpath,'wb') as f:f.write(picdata)print("已保存"+picname) print(piclists) print("共抓取图片数量"+str(len(piclists)))
结果:
2到4页共抓取了135张图片
总结,这节课学了什么?
聚焦爬虫
数据解析方式分类:正则表达式;bs4模块;xpath模块
F12查看网页标签的html格式
正则表达式详细表示方法
正则匹配
import re
list=re.findall(pattern,string,flags)
创建文件夹
爬取和保存页面所有图片格式
[爬虫]3.数据解析及应用 之 正则表达式【爬取网页所有图片】相关推荐
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结
这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...
- python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- python爬虫(一):正则表达式爬取网页文本
文章目录 1 正则表达式 2 网页文本爬取 2.1 单页文本 2.2 多页文本 2.2.1 演示文本 2.2.2 文本信息获取 3 实战记录 3.1 网页纯文本处理 3.1.1 常规网页 3.1.2 ...
- python正则表达式爬取网页数据_常用正则表达式爬取网页信息及HTML分析总结
Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取 标签之间内容2.获取 超链接之间内容3.获取URL最后一个参数命名图片或传递参数4.爬取网页中所有URL链接5.爬取网页标题titl ...
- 编程python爬取网页数据教程_实例讲解Python爬取网页数据
一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...
- 常用正则表达式爬取网页信息及分析HTML标签总结
这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...
- 常用正则表达式爬取网页信息及HTML分析总结
Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3 ...
- python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
文章目录简介正则爬虫Demo本例知识点 简介 python的第三方包极多种,尽量多看多用,对开发者来说是很好的.在爬虫领域,请求网页,除了requests包之外,还有urllib.request模块: ...
- 《跟我一起学爬虫系列》4-使用urllib和beautifulsoup爬取网页
目标 本节目标为爬取成都市高新区2017-2018年所有预/现售楼盘信息 输出格式为:楼盘名 用途 开发商 地址 预售日期 数据来源:成都市城乡房产管理局 说明:urllib和beautif ...
最新文章
- 数据结构中几种经典排序简介
- mysql日志的作用_MySQL 日志相关知识总结
- 现代软件工程 团队博客作业 如何评价个人在团队中的绩效
- 经典c语言程序编程题,c语言35道经典编程题程序
- 页码太靠上怎么办_有些宝宝到了二岁不会说话怎么办
- stl-map的一道很好的题目
- 懒惰和贪婪-正则回溯
- 十年探索,云上明灯,re:Invent再启掀产业风暴
- nginx php value,PHP+NGINX参数优化
- Spark源码阅读——DirectInputDStream
- Unity 2D 跑酷道路动起来
- 学习python_day2
- Win10:系统迁移,重启报错0xc000000e
- PS图像特效算法——镜像渐隐
- 2.1.1 操作系统之进程的定义、特征、组成、组织
- 百度地图 截图java_我从百度地图静态图API中通过url获取到的图片,用java有没有什么办法可以把图片上的百度logo去掉呢...
- NOIWC2018滚粗记
- 关于python的文献综述_关于毕业论文文献综述,史上最全总结.doc
- 遇到的问题--docker---gitlab---k8s---error pulling image configuration: Get https://production.cloudflare.
- 网易云发送验证码短信,发送通知短信,java版