gpt4 book ai didi

python - Scrapy 飞溅多次点击

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:16 24 4
gpt4 key购买 nike

我正在尝试从使用DataTables插件的网站上抓取代理例如,除了一件事之外,一切正常:蜘蛛抓取第一页和第二页,而不在其余页面上移动。

import scrapy
from scrapy_splash import SplashRequest


class SpiderManSpider(scrapy.Spider):
name = 'usproxy'

script = """
function main(splash)
local url = splash.args.url
assert(splash:go(url))
assert(splash:wait(1))

assert(splash:runjs("$('.next').click();"))
assert(splash:wait(1))

return splash:html()
end
"""

def start_requests(self):
yield SplashRequest(url='http://us-proxy.org', endpoint='render.html', callback=self.parse, args={'wait': 1})

def parse(self, response):
for data in response.css("tr"):
yield {
'ip': data.css("td:nth-child(1)::text").extract_first()
}

if response.xpath("//a[@id='proxylisttable_next' and @class='ui-state-disabled']").extract_first():
self.logger.warning("button is disabled")
else:
yield SplashRequest(url=response.url, endpoint='execute', args={'lua_source': self.script, 'wait': 1},
callback=self.parse)

调试器显示它正在过滤所有重复的请求,因此我将 dont_filter 添加到 SplashRequest 中,这导致我出现无限循环,仅显示第二页的数据。

最佳答案

我也遇到了类似的问题。

似乎当执行 assert(splash:runjs("$('.next').click();")) 时,响应中要返回的 html 页面是更改为新的,但response.url 仍与初始请求的 url 相同。

可能的解决方案是将脚本中的 return 语句更改为:

return {
splash:url(),
splash:html(),
}

关于python - Scrapy 飞溅多次点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43205317/

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