Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从JavaScript呈现的网站中刮取数据_Python_Proxy_Scrapy_Web Crawler - Fatal编程技术网

Python 从JavaScript呈现的网站中刮取数据

Python 从JavaScript呈现的网站中刮取数据,python,proxy,scrapy,web-crawler,Python,Proxy,Scrapy,Web Crawler,我想报废。我有以下问题 网站内容是动态加载的 尝试访问该网站时,会重定向到“选择国家/地区”页面 选择国家后,它会弹出选择交货地点,然后重定向到主页 当您试图以编程方式点击结束页时,会得到一个空响应,因为内容是动态加载的 我有一个终端URL列表,我必须从中提取数据。例如,考虑一下。现在我想 直接获取该页面的HTML源代码,绕过choose country、select location弹出窗口动态加载,这样我就可以使用我的Scrapy Xpath选择器提取数据 如果您建议我使用Seleni

我想报废。我有以下问题

  • 网站内容是动态加载的
  • 尝试访问该网站时,会重定向到“选择国家/地区”页面
  • 选择国家后,它会弹出选择交货地点,然后重定向到主页
  • 当您试图以编程方式点击结束页时,会得到一个空响应,因为内容是动态加载的
我有一个终端URL列表,我必须从中提取数据。例如,考虑一下。现在我想

  • 直接获取该页面的HTML源代码,绕过choose country、select location弹出窗口动态加载,这样我就可以使用我的Scrapy Xpath选择器提取数据
  • 如果您建议我使用Selenium、PhantomJS、Ghost或其他方法来处理动态内容,请理解,我希望在处理完将发送给Scrapy的所有动态内容后,在web浏览器中使用最终HTML源代码
  • 此外,我尝试使用代理跳过“选择国家”弹出窗口,但它仍然会加载它并选择交货地点
  • 我尝试过使用Splash,但它返回了choosecontry页面的源代码

    • 我终于找到了答案。我使用EditThisCookie插件查看网页加载的Cookie。我发现它在我的本地存储中存储了3个cookie
      CurrencyCode、ServerId、Site\u Config
      。我使用上述插件以JSON格式复制cookies。我提到在请求中设置cookies

      现在我可以跳过那些位置、送货地址弹出窗口了。之后,我发现动态页面是通过
      加载的,并且发现页面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
      
      现在我可以从这些链接中提取数据了


      感谢@Cal Eliacheff之前的指导。

      dinamic内容意味着AJAX调用。只需获取请求的结构,然后在带有产品id的循环中调用它。通常,您只需要将
      请求
      模块与
      美化组
      结合使用即可。我想位置也是一样。@Cal Eliacheff谢谢你的评论,但你的方式的问题是,即使我使用cookie和用户代理发出请求,就像使用web浏览器一样,我仍然会得到相同的响应。我需要从服务器和脚本之间的响应,这将处理这些动态内容,并给出最终结果,以便我可以饲料,以scrapy。你应该看看调用更好。该位置存储在您从
      SelectLocation.aspx
      获取的cookie中。例如:
      http://www.luluwebstore.com/SelectLocation.aspx?Location=13241&DeliveryMode=H&ReturnUrl=http://www.luluwebstore.com
      允许您绕过国家/地区选择。看起来只有GET请求,通常使用起来更简单。我想你不想在这类网站上使用scrapy。@Cal Eliacheff我真的很抱歉我不理解你的评论。但是我找不到任何
      SelectLocation.aspx
      或类似的脚本/cookie来设置位置。另外,我对动态内容爬行还不熟悉。你能解释得更清楚些吗?此外,我还引用了web浏览器请求标题中的cookie,并将其包含在标题中。好的,在requests.Session中,调用上面的url转到主页,然后您现在可以调用产品。提示:只需使用dev工具的network选项卡查看发生了什么(您可以只过滤html和xhr事件),然后使用
      请求复制进程即可。