如何用爬虫爬漫画
学了一点点的皮毛,想试试看能不能把漫画爬取下来这是网址https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html
其实我也不知道我这个接口找的对不对{:5_99:}
有没有哪位大神帮我看看
import requests
url = 'https://api.guoguomh.com/comic/popularity'
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}
data = {
'comic_id': '4165'
}
r = requests.post(url=url,data=data,headers=headers)
print(r.json()) 这个代码抓取的是 https://api.guoguomh.com/comic/popularity 接口的数据,而非漫画图片。要爬取漫画图片的话,需要分析HTML页面上图片的URL并提取出来。
要想实现爬取漫画图片的功能,需要先请求漫画章节列表的页面(例如:https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html),然后通过解析HTML文档提取出每一页漫画的图片URL,最后再下载这些图片到本地。这是一个比较复杂的过程,需要对HTTP请求、HTML解析和文件IO等方面有一定的了解才能完成。 你好,这个接口并不是用于爬取漫画的。你可以使用 Python 库来爬取网页上的图片和文本信息,并将它们保存到本地文件中。
下面是一个简单的 Python 程序,演示了如何从给定网页中提取所有漫画图片的 URL:
import requests
from bs4 import BeautifulSoup
url = "https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html"
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
images = soup.find_all('img')
for i, image in enumerate(images):
img_url = image['src']
print(f"Downloading image {i+1} from {img_url}")
img_response = requests.get(img_url)
with open(f"{i+1}.jpg", "wb") as f:
f.write(img_response.content)
你可以在代码中修改图片保存的位置和名称,也可以根据需要进行进一步的网页解析和处理。请注意,在爬取网站时请遵守网站的合法政策,不要过度爬取,以免造成对网站的影响。
有用请设置最佳答案 陶远航 发表于 2023-5-3 17:00
这个代码抓取的是 https://api.guoguomh.com/comic/popularity 接口的数据,而非漫画图片。要爬取漫画图片 ...
如果是请求https://www.guoguomh.com/manhua/yiquanchaoren/2066301.html这个页面的话也拿不到url,<div id="images"></div>得到的是空的,而在网页源代码中是有一堆<img>的 sfqxx 发表于 2023-5-3 17:09
你好,这个接口并不是用于爬取漫画的。你可以使用 Python 库来爬取网页上的图片和文本信息,并将它们保存到 ...
这样好像也不对,我打印了images输出[<img alt="" src="https://img.guoguomh.com/images/logo/dmzj-mini.png"/>, <img class="usr_im" id="avatar" src="">
<a class="c_1" href="/member/" id="username" target="_blank"></a> </img>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/02/b6/4d689a331cd6f3d4846e0218cb6f.jpg" width="119"/>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/91/ca/712db1f02e9b4b31f2d4fba40f8a.jpg" width="119"/>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/06/79/8921140a907fcecc1d837b9f1728.jpg" width="119"/>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/8c/fa/087513710e1a10205c5354b0c354.jpg" width="119"/>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/c1/35/fa5a0013be8180d631c95c724a1d.jpg" width="119"/>, <img alt="" default="images/default/cover.png" height="160" src="https://otu1.dodomh.com/images/o/e0/7a/7d6aade0d1b1db540448004a558c.jpg" width="119"/>, <img alt="" height="34" src="https://img.guoguomh.com/images/block/201907/1564156161zie0ErEvwqXClpaZ.jpg" width="34"/>] zhoujie13 发表于 2023-5-3 17:18
这样好像也不对,我打印了images输出[,
, , , , , , , ]
这个网页不是很复杂,我写一个代码出来给你吧 isdkz 发表于 2023-5-3 17:19
这个网页不是很复杂,我写一个代码出来给你吧
可以是可以,我主要是想知道怎么做到的 zhoujie13 发表于 2023-5-3 17:20
可以是可以,我主要是想知道怎么做到的
这段代码似乎使用 beautiful soup 从“url”变量提到的网页下载图片。
然而,“soup.find_all('img')”的输出显示它没有正确地找到相关于在url中提到的漫画“易全超人”的图片。
问题可能是由于网站结构发生变化或由于用户代理未被网站识别。
在进一步调查之前,最好检查一下网站结构是否发生了变化,如果是这种情况,请相应地更新代码。验证用户代理也可能是一个有用的步骤。
无论如何,确认代码按预期工作将非常重要。 sfqxx 发表于 2023-5-3 17:21
这段代码似乎使用 beautiful soup 从“url”变量提到的网页下载图片。
然而,“soup.find_all('img') ...
好复杂,检查网站结构和验证用户代理是怎么做的,看视频才学到bs4 本帖最后由 isdkz 于 2023-5-3 17:30 编辑
zhoujie13 发表于 2023-5-3 17:20
可以是可以,我主要是想知道怎么做到的
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)))
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. 请求网页内容:
r = requests.get(url)
使用 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)))
这里先定义一个正则表达式模式,用于匹配包含图片链接的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 函数将图片下载到指定的文件夹中。图片文件名按照顺序编号。
zhoujie13 发表于 2023-5-3 17:25
好复杂,检查网站结构和验证用户代理是怎么做的,看视频才学到bs4
我觉得这里还是直接用正则表达式就好了
上面的代码是我纯手撸出来的,给个最佳支持一下呗{:5_92:}
如果您想学习如何检查网站结构和验证用户代理,以下是一些可能对你有帮助的资源:
- 使用开发者工具:许多现代浏览器都配备了内置的开发者工具。您可以使用这些工具来检查特定网站的结构和调试代码。通常,您只需要右键单击页面上的任何元素并选择“检查”即可打开开发者工具。大多数开发者工具还提供网络分析器,以便您可以查看从服务器加载的各种资源(如css、js和图像)。
- 验证用户代理:可以通过创建一个http头来手动验证用户代理。要验证用户代理,请使用一个著名的客户端,例如curl或wget,并在命令行中运行命令。在curl中,您可以使用“--user-agent”标志指定用户代理。例如,“curl --user-agent 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/58.0.3029.110 safari/537.3' http://example.com”。
如果您真正想深入了解如何检查网站结构和验证用户代理,那么bs4是一个很好的选择。bs4是一个python库,使我们可以解析html和xml文档,并可以在其中寻找和操作某些元素。这个库支持css选择器,所以它提供了一种与网页元素交互的简单方式。您可以通过查找网上的bs4教程和视频来掌握它,并从中深入学习该主题。
给我最佳答案 isdkz 发表于 2023-5-3 17:27
这段代码的主要目的是从一个漫画网站上抓取一章漫画的所有图片链接。这里以《一拳超人》第206话为 ...
好神奇,我想知道你是怎么知道图片在var chapterImages里的?因为F12检查元素图片在<div id="images"><img src="https://nt3.dodomh.com/images/p/66/aa/d80872eb3d629c520a30789cda9a.jpg" data-index="1" style="display: inline;"><p class="img_info">(1/39)</p><img src="https://nc4.dodomh.com/images/p/fe/fa/c0b004c5851d26fa6aef863b8248.jpg" data-index="2" style="display: inline;"><p class="img_info">(2/39)</p><img src="https://nb.lianaimh.com/images/p/00/7e/0a04cde023115d79cb68a671f230.jpg" data-index="3" style="display: inline;"><p class="img_info">(3/39)</p><img src="https://na.gougoumh.com/images/p/16/97/64561d35f32902ee37c7b2aebc1a.jpg" data-index="4" style="display: inline;"><p class="img_info">(4/39)</p><img src="https://nt1.dodomh.com/images/p/97/cc/f27a653241089cf51eb0c48a566e.jpg" data-index="5" style="display: inline;"><p class="img_info">(5/39)</p><img src="https://nt3.dodomh.com/images/p/79/d2/63bc401e82dc69e4207abb3d4751.jpg" data-index="6" style="display: inline;"><p class="img_info">(6/39)</p><img src="https://nt3.dodomh.com/images/p/63/36/b9c044ad5c0851272c9144d7b733.jpg" data-index="7" style="display: inline;"><p class="img_info">(7/39)</p><img src="https://na.duoximh.com/images/p/5e/59/cfb06705aa510235754c0e92790b.jpg" data-index="8" style="display: inline;"><p class="img_info">(8/39)</p><img src="https://nc4.dodomh.com/images/p/f5/0d/9793fda47866b69ecb47687cca4e.jpg" data-index="9" style="display: inline;"><p class="img_info">(9/39)</p><img src="https://nt3.dodomh.com/images/p/63/53/a58e31de75fee5a54f91d369ce7f.jpg" data-index="10" style="display: inline;"><p class="img_info">(10/39)</p><img src="https://nc1.dodomh.com/images/p/b4/b0/65b9c678103f9552d61657190dda.jpg" data-index="11" style="display: inline;"><p class="img_info">(11/39)</p></div>
但是源代码中是没有这些,我还以为是动态网页 动态渲染,用selenium就可以 zhoujie13 发表于 2023-5-3 17:35
好神奇,我想知道你是怎么知道图片在var chapterImages里的?因为F12检查元素图片在
但是源代码中是没有 ...
直接搜出来的,搜 jpg 没有搜到有 js 的请求就肯定在 html 里面,如果是在 html 一般就会在你请求的那个 html 里
它确实是动态渲染没错,只不过数据直接带在 html 上
zhoujie13 发表于 2023-5-3 17:35
好神奇,我想知道你是怎么知道图片在var chapterImages里的?因为F12检查元素图片在
但是源代码中是没有 ...
这下可以给最佳了吗?{:5_92:} isdkz 发表于 2023-5-3 17:43
这下可以给最佳了吗?
必须的 zhoujie13 发表于 2023-5-3 17:44
必须的
感谢感谢{:10_287:} 草!!!!
nd sfqxx 发表于 2023-5-3 17:46
草!!!!
nd
你不能强买强卖,要给出客户满意的答案{:10_256:}
页:
[1]
2