本帖最后由 isdkz 于 2023-5-3 17:30 编辑
[b]import re
import requests
url = 'https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html'
r = requests.get(url)
print('var chapterImages = [' in r.text)
pattern = re.compile(r'var chapterImages = \[(.*)\]')
imglist = map(lambda i: i.replace('\\/', '/'), eval(pattern.search(r.text)[1]))
for i in imglist:
# 可以换成下载图片并对图片编号的代码
print(i)
这段代码的主要目的是从一个漫画网站上抓取一章漫画的所有图片链接。这里以《一拳超人》第206话为例。现在我先解释代码的每一行,然后再补充下载图片的部分。
1. 导入所需库:
import re
import requests
re 库是Python的正则表达式库,用于进行字符串的模式匹配; requests 库是一个用于发送HTTP请求的库,可以从网页中获取数据。
2. 指定URL:
url = 'https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html'
这行代码指定了漫画《一拳超人》第206话的URL。
3. 请求网页内容:
使用 requests.get() 方法获取网页的HTML内容。
4. 检查是否包含图片链接信息:
print('var chapterImages = [' in r.text)
这行代码检查网页内容中是否包含'var chapterImages = ['这个字符串,如果包含则说明包含了图片链接信息。
5. 提取图片链接列表:
pattern = re.compile(r'var chapterImages = \[(.*)\]')
imglist = map(lambda i: i.replace('\\/', '/'), eval(pattern.search(r.text)[1]))
这里先定义一个正则表达式模式,用于匹配包含图片链接的JavaScript变量。然后使用 eval() 函数和正则表达式提取出图片链接列表。最后用 map() 函数将链接中的'\\/'替换为'/'。
6. 遍历图片链接:
for i in imglist:
# 可以换成下载图片并对图片编号的代码
print(i)
这里是一个循环,遍历提取到的所有图片链接。在循环内部可以添加下载图片的代码。
现在我为你补充一个下载图片的函数:
import os
def download_image(img_url, save_path):
response = requests.get(img_url)
if response.status_code == 200:
with open(save_path, 'wb') as f:
f.write(response.content)
else:
print(f"Failed to download image: {img_url}")
将这个函数添加到你的代码中,然后使用这个函数下载图片:
download_folder = "yiquanchaoren_206"
if not os.path.exists(download_folder):
os.makedirs(download_folder)
for index, img_url in enumerate(imglist):
save_path = os.path.join(download_folder, f"{index + 1}.jpg")
download_image(img_url, save_path)
这段代码首先创建一个文件夹用于存储下载的图片,然后遍历图片链接,并使用 download_image 函数将图片下载到指定的文件夹中。图片文件名按照顺序编号。
[/b] |