从JavaScript呈现的网站中抓取数据

时间:2017-01-03 06:39:56

标签: python proxy scrapy web-crawler

我想废弃Lulu webstore。我有以下问题。

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

我有一个结束网址列表,我必须从中获取数据。例如,考虑mobile accessories。现在我想

  • 直接获取该页面的HTML源代码,动态加载绕过选择国家/地区,选择位置弹出窗口,以便我可以使用我的Scrapy Xpath选择器来提取数据。
  • 如果您建议我使用Selenium,PhantomJS,Ghost或其他内容来处理动态内容,请在处理将要发送到Scrapy的所有动态内容后理解我想要在Web浏览器中使用最终HTML源代码。< / LI>
  • 此外,我尝试使用代理跳过选择国家/地区弹出窗口,但仍会加载它并选择送货地点。
  • 我尝试过使用Splash,但它会返回选择国家/地区页面的来源。

1 个答案:

答案 0 :(得分:1)

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

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

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先前的指导。