问题描述
我想做什么
在 https://www.contour.bg/myzhe 我试图抓取所有产品,为此我需要多次点击下一页按钮。
因此,我想从页面中获取页数,并通过循环根据需要多次单击下一页按钮。
我正在通过 docker 容器使用scrapy-splash。
问题
目前我的脚本看起来像这样,点击次数是硬编码的,按钮点击不起作用(同一个页面被抓取了 10 次):
function main(splash,args)
assert(splash:go(args.url))
assert(splash:wait(0.5))
treat=require('treat')
result= {}
for i=1,10,1
do
assert(splash:runjs('document.querySelector(".page-link.next").click()'))
result[i]=splash:html()
end
return treat.as_array(result)
end
On the image you can see the elements I am looking for
我试过了:
替换:
assert(splash:runjs('document.querySelector(".page-link.next").click()'))
与
button = splash:select('.page-link.next')
button:mouse_click()
但得到了相同的结果。
我也按照Darius
的建议进行了尝试在“.page-link.next”前添加等待时间和“a”。
assert(splash:runjs('document.querySelector("a.page-link.next").click()'))
assert(splash:wait(5))
result[i]=splash:html()
就像在 docker 容器中测试时一样 - 页面实际上在更改并且内容显示正确,但是在使用 scrapy 执行时我收到 504 错误,这可能是由于网站试图停止抓取工具。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)