Scrapy从下拉菜单中选择

时间:2014-11-17 18:21:21

标签: javascript ajax xpath scrapy scrapy-spider

我正在尝试使用scrapy抓取此页面https://www.stickyguide.com/dispensaries/leaf-lab/。 我现在很难在这个页面上抓取评论很长一段时间。如果任何人有处理Ajax或Javascript的经验,请分享您的想法。

1)我可以轻松获得用于审核的Xpath:

response.xpath('//*[@id="reviews_section"]/div')    

但是,我相信页面的评论部分是通过javascript加载的。每当我抓取此页面时,我都得到以下Xpath值:

<Selector xpath='//*[@id="reviews_section"]/div' data=u'<div id="loader">\n<div class="loader"></'>

如果有任何方法我可以用来确保在加载javascript之前scrapy爬行? 当我在线查找方法时,使用selenium包可能是一种解决方案,但可能效率不高。

2)我遇到的另一个问题是我只想抓取药房的数据。我需要选择选项&#34; VIEW:Dispensary Only&#34;从Review模块旁边的下拉菜单中。我看了一下HTML代码,它往往是一个Ajax对象。

<select id="sort" name="sort" onchange="new Ajax.Request('/update_reviews_section/2487', {asynchronous:true, evalScripts:true, parameters:'sort_by=' + $('sort').value + '&amp;authenticity_token=' + encodeURIComponent('69BgJpnnj0tx/0lYwjIk75iFj0/l2R9EDj1No1FJX9o=')})">

如果有任何方法我可以用来请求选项的内容&#34; VIEW:Dispensary Only&#34;? 我已经在stackoverflow上尝试了很多方法,但我仍然无法解决这个问题。

提前谢谢

1 个答案:

答案 0 :(得分:0)

你需要打开你的开发工具(F12),查找加载这段html的地方,并且只是请求获取它。我可以看到评论加载了这个请求(POST到/ update_review_section有三个键和表单体中的值),记得在开发工具中保留复选框'preserve_log',这样你就可以看到页面加载时会发生什么。请参阅屏幕截图中突出显示的请求

enter image description here