当处理多个链接时,scrapy splash并不总是成功

当处理多个链接时,scrapy splash并不总是成功,scrapy,web-crawler,scrapy-splash,Scrapy,Web Crawler,Scrapy Splash,我使用“刮擦飞溅”来抓取多个页面。当只处理一到两个页面时,它运行良好,但当一次遇到更多页面时,它不会每次都成功。代码如下: class MainpageSpider(scrapy.Spider): 名称='主页' 允许的_域=['example.com'] start_url=['www.example.com/homepage/'] link_提取器=LinkExtractor( 允许_domains='example.com', allow=r'某些正则表达式', 拒绝扩展='.jpg' )

我使用“刮擦飞溅”来抓取多个页面。当只处理一到两个页面时,它运行良好,但当一次遇到更多页面时,它不会每次都成功。代码如下:

class MainpageSpider(scrapy.Spider):
名称='主页'
允许的_域=['example.com']
start_url=['www.example.com/homepage/']
link_提取器=LinkExtractor(
允许_domains='example.com',
allow=r'某些正则表达式',
拒绝扩展='.jpg'
)
def解析(自我、响应、**kwargs):
self.logger.info('在%s上调用了解析函数,response.url)
对于self.link\u提取器.extract\u链接中的链接(响应):
script=”“”
主功能(飞溅、参数)
splash:add_cookie{“key”,“value”}
splash.request\u body\u enable=true
splash.response\u body\u enable=true
本地json_data=“失败”
飞溅:on_响应(功能(响应)
if(response.url==“www.example.com/path/to/ajax.php”)
然后
json_data=response.body
结束
(完)
断言(splash:go){
splash.args.url,
headers=args.headers,
http\u method=args.http\u method,
body=args.body
})
断言(飞溅:等待(0.5))
返回{
html=splash:html(),
json_数据=json_数据
}
结束
"""
生成请求(link.url,endpoint='execute',
args={
“lua_源”:脚本
},
callback=self.parse(示例)
def parse_示例(self、response、**kwargs):
self.logger.info(“url:%s”,response.url)
self.logger.info(“原始数据%s”,response.data['json_data'])
decoded=base64.b64解码(response.data['json_data'])
parsed=json.load(已解码)
self.logger.info(“json解析数据%s”,解析['data']))
代码非常简单。首先,从主页中提取一些链接。其次,
parse
函数处理链接。这里,我需要的数据只能通过ajax请求获得。此ajax请求不能手动构建,因为存在一些动态请求数据。最后,
parse_示例
函数将从
html
parse
函数返回的
json_数据
中提取数据

问题是:

  • 当从主页中提取的链接只有一个或两个时,此代码运行良好
  • 当有更多链接时,
    parse
    函数不会获得多个链接的
    json\u数据
  • 我尝试增加飞溅等待时间。这可以部分解决这个问题,但不稳定

我想知道这个问题或bug的根本原因。也许有人能给我一些解决办法。

好了,问题解决了。我只需要包装
splash:wait()
并在循环中检查
json\u数据的值。如果条件不稳定,则调用
splash:wait()