gpt4 book ai didi

python - 如何发送另一个请求并在scrapy解析函数中获取结果?

转载 作者:行者123 更新时间:2023-12-01 08:46:38 25 4
gpt4 key购买 nike

我正在分析一个具有两级菜单的 HTML 页面。当顶级菜单更改时,会发送一个 AJAX 请求来获取二级菜单项。当顶部和第二个菜单都被选中时,刷新内容。

我需要的是在scrapy的parse函数中发送另一个请求并获取子菜单响应。所以我可以迭代子菜单,为每个子菜单项构建 scrapy.Request

伪代码如下:

def parse(self, response):
top_level_menu = response.xpath('//TOP_LEVEL_MENU_XPATH')
second_level_menu_items = ## HERE I NEED TO SEND A REQUEST AND GET RESULT, PARSED TO ITME VALUE LIST

for second_menu_item in second_level_menu_items:
yield scrapy.Request(response.urljoin(content_request_url + '?top_level=' + top_level_menu + '&second_level_menu=' + second_menu_item), callback=self.parse_content)

我该怎么做?

直接使用requests lib?或者scrapy提供的其他功能?

最佳答案

这里推荐的方法是创建另一个回调(parse_second_level_menus?)来处理二级菜单项的响应,并在其中创建对内容页面的请求。

此外,您还可以使用 request.meta 属性在回调方法 ( more info here ) 之间传递数据。

可能是这样的:

def parse(self, response):
top_level_menu = response.xpath('//TOP_LEVEL_MENU_XPATH').get()
yield scrapy.Request(
some_url,
callback=self.parse_second_level_menus,
# pass the top_level_menu value to the other callback
meta={'top_menu': top_level_menu},
)

def parse_second_level_menus(self, response):
# read the data passed in the meta by the first callback
top_level_menu = response.meta.get('top_menu')
second_level_menu_items = response.xpath('...').getall()

for second_menu_item in second_level_menu_items:
url = response.urljoin(content_request_url + '?top_level=' + top_level_menu + '&second_level_menu=' + second_menu_item)
yield scrapy.Request(
url,
callback=self.parse_content
)

def parse_content(self, response):
...

另一种方法(在本例中不太推荐)是使用此库:https://github.com/rmax/scrapy-inline-requests

关于python - 如何发送另一个请求并在scrapy解析函数中获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278942/

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