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