Products
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="前面缺少了一个空格,得出结论,规范的代码习惯真的很重要,毕竟越小的问题,越容易被忽略
利用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