gpt4 book ai didi

scrapy - 如何确保 scrapy-splash 已成功渲染整个页面

转载 作者:行者123 更新时间:2023-12-02 06:41:44 26 4
gpt4 key购买 nike

当我使用splash渲染整个目标页面来爬取整个网站时出现问题。某些页面不是随机成功的,所以我错误地获取了支持渲染工作完成后出现的信息。这意味着我尽管我可以从其他渲染结果中获取全部信息,但仅从渲染结果中获取部分信息。

这是我的代码:

yield SplashRequest(url,self.splash_parse,args = {"wait": 3,},endpoint="render.html")

settings:
SPLASH_URL = 'XXX'
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter

# a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

最佳答案

我这么晚才回复,因为这个问题没有答案,而且它在 Google 搜索中可见。

我遇到了类似的问题,我找到的唯一解决方案(除了增加 wait 参数,这可能有效也可能无效,但不可靠)是使用 execute用于等待元素的端点和自定义 lua 脚本。如果这听起来不必要地复杂,那么在我看来,Scrapy 和 Splash 的设计并不好,但我还没有找到更好的东西来满足我的需求。

我的 Lua 脚本看起来像这样:

lua_base = '''
function main(splash)
splash:init_cookies(splash.args.cookies)
splash:go(splash.args.url)

while not splash:select("{}") do
splash:wait(0.1)
end
splash:wait(0.1)
return {{
cookies = splash:get_cookies(),
html=splash:html()
}}
end
'''
css = 'table > tr > td.mydata'
lua_script = lua_base.format(css)

我生成这样的请求:

        yield SplashRequest(link, self.parse, endpoint='execute',
args={
'wait': 0.1,
'images': 0,
'lua_source': lua_script,
})

虽然很丑,但是很管用。

关于scrapy - 如何确保 scrapy-splash 已成功渲染整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053458/

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