gpt4 book ai didi

python - Scrapy:修改响应中的元素和字段

转载 作者:太空狗 更新时间:2023-10-30 01:37:51 25 4
gpt4 key购买 nike

我是 Scrapy、Python 和面向对象编程的新手,所以如果我有任何不正确的术语或在任何方面不清楚,我深表歉意。

我正在尝试编写一个蜘蛛程序,当它从响应中抓取项目时,还会创建响应的修改版本以保存到文件中。例如,我正在尝试更改“src”链接以指向本地保存的抓取文件。

目前,我正在使用 Scrapy 的选择器抓取数据并使用 lxml 修改响应。但是,我想使用 Scrapy 的方法而不是 lxml 来进行修改,因为同时使用 Scrapy 选择器和 lxml 意味着本质上是将代码加倍以在响应中定位相同的元素。

我在下面添加了一些代码来说明我的观点。一切都发生在蜘蛛解析函数中。

def 解析( self ,响应):

    # Scrape thumbnail URLs using Scrapy selectors
for post in response.css('.post'): # For each post
for thumb in post.css('.thumb'): # For each thumbnail
item = Item() # Create an image item
item['thumbnail_url'] = []
item['thumbnail_savepath'] = []
for x in thumb.xpath('img/@src').extract():
thumbnail_url = 'https:' + x
thumbnail_filename = re.search('.*/(.*)', thumbnail_url).group(1)
thumbnail_savepath = 'thumbnails/' + thumbnail_filename
item['thumbnail_url'] += [thumbnail_url]
item['thumbnail_savepath'] += [thumbnail_savepath]

# Make modified html using lxml
body_lxml = lxml.html.document_fromstring(response.body)
for thumbnail in body_lxml.xpath('//img'):
thumbnail_src = thumbnail.get('src') # Original link address
thumbnail_path = './thumbnails/' + basename(thumbnail_src) # New link address
thumbnail.set('src',image_path) # Setting new link address

如代码所示,它使用 Scrapy 选择器遍历图像以抓取项目,然后使用 lxml 进行第二次迭代以修改响应。我必须使用两种不同的方法来遍历我试图避免的相同元素。如果可能的话,我想在同一个 for 循环中进行抓取和修改。

我认为可以使用 response.request() 方法,但很难从文档和在线搜索中了解如何使用它。是否有某种方法允许 Scrapy 修改响应中的单个元素或字段?任何帮助将不胜感激。

谢谢。

最佳答案

Currently, I'm scraping data using Scrapy's selectors and modifying the response using lxml. However, I want to use Scrapy's methods to do the modifications instead of lxml as using both Scrapy selectors and lxml means essentially doubling code to locate the same elements in a response.

Parsel选择器(Scrapy 在下面使用)旨在提取信息,而不是编辑底层 HTML。我相信您目前的方法是最好的方法。

如果你真的想避免重复的感觉,你可以只使用 lxml,但我强烈建议你不要这样做。

关于python - Scrapy:修改响应中的元素和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31502522/

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