其他教程

其他教程

Products

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

利用python的正则表达式从超链接取数

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


问题描述:

在爬图片网站的图片,要把"src="后面的链接取出来,但是一直取出来是空的,不知道正则表达式哪里有错!

要爬取的链接:

璀璨耀眼的星空风景图片

想要得到的结果:
//img.ivsky.com/img/tupian/li/202107/15/xingkong-005.jpg

目前的正则写法:

ex = '

.*?<img src="(.*?)" alt.*?'
img_src_list = re.findall(ex,page_text,re.S)

完整的代码:

import requests

import re

import os

if __name__ == "__main__":

if not os.path.exists('./otherLibs'):

os.mkdir('./otherLibs')

url = 'https://www.ivsky.com/tupian/ziranfengguang/'

headers = {

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0'

}

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

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

img_src_list = re.findall(ex,page_text,re.S)

for src in img_src_list:

src = 'https:'+src

iamge_data = requests.get(url=url,headers=headers).content

img_name = src.split('/')[-1]

img_Path= './otherLibs'+img_name

with open(img_Path,'wb') as fp:

fp.write(iamge_data)

print(img_name,'下载成功')

网友观点:

望被采纳

import os

import re

import requests

if __name__ == "__main__":

if not os.path.exists('./otherLibs'):

os.mkdir('./otherLibs')

url = 'https://www.ivsky.com/tupian/ziranfengguang/'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',

'cookie': 't = 15dc3f49950b911ad395e4d2b5f21bd0;r = 9777;Hm_lvt_a0c29956538209f8d51a5eede55c74f9 = 1642561701;' 'Hm_lpvt_c13cf8e9faf62071ac13fd4eafaf1acf = 1642561835;Hm_lpvt_a0c29956538209f8d51a5eede55c74f9 = 1642561836'

}

# 必须要加cookie ,可以在浏览器登录后获取,或这接口请求再提取cookie

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

ex = '<img src="(.*?)" alt="(.*?)">' img_src_list = re.findall(ex,page_text) #找出src 和alt 返回元组

for src in img_src_list:

url = 'https:' + src[0] #拼接图片地址 alt=src[1] #获取alt 标题

if not os.path.exists('./otherLibs/{}'.format(alt)):

os.mkdir('./otherLibs/{}'.format(alt)) #创建以标题为名的文件夹 with open("./otherLibs/{}/{}.txt".format(alt,alt), 'w+') as fp: #打开或创建以标题为名的 文件 fp.write(alt+"-->"+url) #向文件中写入src

print(alt, '下载成功')

生成的文件和下载地址

望被采纳

你可以复制一段网页代码出来,测试下你的正则能否匹配,如果能,也许你获得的pag_text有问题

我用js是这么写的

ex = /<img.*src="(.*?)"/g

str.match(ex)

python爬虫,用正则表达式提取页面里所有的http链接

爬虫的目标网站是 https://www.lz13.cn/ , 我想要将这个网站里的每一篇文章都抓取下来,就必须获得网站内部的每一个页面的url,具体思路如下:

  1. 进入网站首页,使用正则表达式提取所有以https://www.lz13.cn/ 开头的url
  2. 逐个爬取第一步中所提取到的url,并将新网页里的符合要求的url也都提取出来

如果你有数据结构的功底,一定已经看明白这其中的门道了。从一个url进入到一个页面,这个页面里还有会其他的http连接,进入这其中某个连接后,又可以得到新的http链接,他们组成了一颗树。我的程序可以选择广度优先遍历,也可以选择深度优先遍历,但不论哪种遍历方法,我都需要将一个页面里的所有http链接都提取出来。

已经访问过的url,可以放到一个集合中,访问新的url前,先检查这个url是否已经被访问过了,对于单个网站,url数量不会太多,撑死了几万个,使用集合就可以保存他们。

思路已经有了,先来实现第一步,提取一个页面里的所有http连接

1. 获得网页源码

首先实现一个函数,来获得指定url的html源码

标签:

提交需求或反馈

Demand feedback