2017-01-03 87 views
-1

我想要报废Lulu webstore。我遇到以下问题。从JavaScript呈现的网站刮取数据

  • 网站内容动态加载。
  • 该网站试图访问时,重定向选择国家页面。
  • 选择国家后,它弹出选择交货地点,然后重定向到主页。
  • 当您尝试以编程方式点击结束页面时,您会收到一个空的响应,因为内容是动态加载的。

我有一个结束URL的列表,我必须从中抓取数据。例如,请考虑mobile accessories。现在我想

  • 获取该页面直接,这是动态加载绕过选择国家,选择位置弹出窗口,这样我就可以用我的Scrapy XPath选择提取数据的HTML源代码。
  • 如果您建议我使用Selenium,PhantomJS,Ghost或其他来处理动态内容,请理解我在处理将发送给Scrapy的所有动态内容后,希望在Web浏览器中使用最终的HTML源代码。
  • 另外,我尝试使用代理来跳过选择国家弹出窗口,但仍然加载它并选择交付地点。
  • 我试过使用Splash,但是它返回了我选择国家页面的来源。
+0

好的内容意味着AJAX调用。只需获取请求的结构,然后使用产品的ID进行循环调用即可。通常你只需要'request'模块,与'BeautifulSoup'结合使用。我猜也是一样。 –

+0

@Cal Eliacheff感谢您的评论,但你的方式问题是,即使我用cookie和用户代理与web浏览器一样提出请求,但我仍然得到相同的响应。我需要服务器和脚本之间的响应,它将处理这些动态内容并给出最终结果,以便我可以将它们馈送给scrapy。 – Mani

+0

你应该更好地看待电话。该位置存储在您从“SelectLocation.aspx”中获得的cookie中。例如:'http://www.luluwebstore.com/SelectLocation.aspx?Location = 13241&DeliveryMode = H&ReturnUrl = http:// www.luluwebstore.com'允许您绕过国家选择。它看起来像只有GET请求,通常使用更简单。恕我直言,你不希望为这类网站使用scrapy。 –

回答

1

最后我找到答案。我使用EditThisCookie插件来查看Web页面加载的Cookie。我发现它在我的本地存储中存储3个Cookie CurrencyCode,ServerId,Site_Config。我使用上面提到的插件以JSON格式复制cookie。我提到this manual用于在请求中设置cookie。

现在,我可以跳过这些位置,送货地址弹出窗口。之后,我发现动态页面通过<script type=text/javascript>加载,发现页面url的一部分存储在一个变量中。我使用split()提取了该值。这里是获取动态页面url的脚本部分。

from lxml import html 
page_source=requests.get(url,cookies=jar) 
tree=html.fromstring(page_source.content)  
dynamic_pg_link=tree.xpath('//div[@class="col3_T02"]/div/script/text()')[0] #entire javascript to load product pages 
dynamic_pg_link=dynamic_pg_link.split("=")[1].split(";")[0].strip()#obtains the dynamic page url. 
page_link="http://www.luluwebstore.com/Handler/ProductShowcaseHandler.ashx?ProductShowcaseInput="+dynamic_pg_link 

现在我可以从这些LInks中提取数据。

感谢@Cal Eliacheff先前的指导。