gpt4 book ai didi

scrapy - 如何在 scrappy 中手动执行 Request 对象?

转载 作者:行者123 更新时间:2023-12-01 15:19:42 25 4
gpt4 key购买 nike

我正在尝试使用 scrapy 下载一个纯 HTML 网站。我正在使用 CrawlSpider 类来实现这一点。这是我的解析器的样子。我的爬虫下载页面的 HTML 源代码并制作网站的本地镜像。它成功地镜像了网站,但没有图像。要下载每个页面所附的图片,我尝试添加:

def parse_link(self, response):
# Download the source of the page

# CODE HERE

# Now search for images

x = HtmlXPathSelector(response)
imgs = x.select('//img/@src').extract()

# Download images

for i in imgs:
r = Request(urljoin(response.url, i), callback=self.parse_link)
# execute the request here

Scrapy's Documentation 中的示例中,解析器似乎返回了 Request 对象,然后该对象被执行。

有没有办法手动执行Request,从而得到Response?我需要在每次 parse_link 调用时执行多个请求。

最佳答案

您可以使用 Images 下载图像管道。或者,如果您想手动执行请求,请使用 yield:

def parse_link(self, response):
"""Download the source of the page"""

# CODE HERE

item = my_loader.load_item()

# Now search for images

imgs = HtmlXPathSelector(response).select('//img/@src').extract()

# Download images

path = '/local/path/to/where/i/want/the/images/'
item['path'] = path

for i in imgs:
image_src = i[0]
item['images'].append(image_src)
yield Request(urljoin(response.url, image_src),
callback=self.parse_images,
meta=dict(path=path))

yield item

def parse_images(self, response):
"""Save images to disk"""

path = response.meta.get('path')

n = get_the_filename(response.url)
f = open(path + n, 'wb')
f.write(response.body)

关于scrapy - 如何在 scrappy 中手动执行 Request 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15287448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com