其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

python正则表达式—匹配图片地址

GG网络技术分享 2025-03-18 16:14 4


问题描述:

python入坑两周小萌新,在跟视频练习时,发现对应的正则方法好像无法使用,但是在CSDN上面参考了几个好像也没发现有什么问题。

但是:results = 【】 ,这是什么原因呢?

请大佬指教:

 

网友观点:

正则表达式在不同的网站上不是通用的,我看了下糗事百科那个网址,没有符合你那个正则的文本。你可以具体描述下你要做些什么。

所写的正则表达式没有匹配项,所以返回空列表。可用

pat = re.compile(r'<img src="(.*?)"')匹配页面所有图片地址。

您使用16 和 18 行的代码也是results=[]吗

# 导入相关模块

import requests

import re

import os

# 获取响应信息

url = 'https://www.qiushibaike.com/imgrank/'

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'

}

suju = requests.get(url=url, headers=headers).text

#print(suju)

# 用正则表达式提取图片地址

#ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'

pat = re.compile('<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>', re.S)

img_scr = re.findall(pat, suju)

#pat = re.compile(r'<img src="(.*?)"')

#results = re.findall(pat, suju)

print(img_scr)

问题已解决,正则没问题,因为粗心,

pat = re.compile('<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>', re.S)

这段代码写成了

pat = re.compile('<div class="thumb">.*?<img src="(.*?)"alt=.*?</div>', re.S)

“alt="前面缺少了一个空格,得出结论,规范的代码习惯真的很重要,毕竟越小的问题,越容易被忽略

【Python】利用urllib模块+正则表达式爬取贴吧图片

利用urllib模块+正则表达式爬取http://tieba.baidu.com/p/2460150866页面中的所有图片,保存到本地

思路分析

本题的核心就是python3中urllib.request模块提供的urlretrieve()函数。

urlretrieve()方法可以实现直接将远程数据下载到本地

函数urlretrieve(url, filename=None, reporthook=None, data=None)

参数名称参数意义

url下载链接地址

filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)

reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。

datapost导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头

因此我们需要为最终的urlretrieve这步操作准备这些参数。

图片的url也就是下载地址,它来自html代码的img标签内的src参数。

所以我们首先要获得目标网址的全部源代码,在此基础之上我们再用正则表达式对html代码适当进行过滤得到url下载地址。

最后filenamere和reporthook回调函数我们都可以自由发挥。

代码示例

标签:

提交需求或反馈

Demand feedback