爬取限制脚本访问的网站
我之前用一个Python脚本(urllib)抓取一个网站的数据。现在这个网站似乎在屏蔽我的请求,每当我用脚本请求网页时,得到的HTML里有一些JavaScript,但没有我想要的数据。而我用浏览器访问这个网站却没问题。我尝试把“User-agent”改成和我浏览器一样的,但还是没用。我注意到一个奇怪的现象,就是在我用浏览器打开一个页面后,脚本也能访问这个页面。
所以我有几个问题:
- 服务器是怎么知道请求不是来自浏览器的(即使我改了User-agent)?
- 是什么机制导致只有在浏览器加载网页后,才能通过脚本访问?是缓存吗?如果是,那缓存是在哪里发生的?
- 有什么建议可以继续进行吗?(我有一个不太优雅的解决方案,就是让我浏览器先打开每个页面,然后再用脚本加载,但这太耗时间了)
谢谢!
1 个回答
1
根据现有的信息来看,这个网站可能更新了,加入了一个叫做JavaScript加载器的东西。urllib
这个工具无法处理JavaScript,所以它就没法继续工作了。(这只是我的猜测)
网站有很多方法可以阻止爬虫程序访问,比如通过JavaScript设置或更新一个cookie,或者以某种方式修改会话,以通过这个初步的检测。这些方法完全依赖于具体的网站,所以你需要自己去研究一下。
通常的解决办法是使用一个能处理JavaScript的爬虫工具,比如Selenium
。这个工具实际上会使用你电脑上安装的Firefox
、Chrome
或IE
浏览器来打开网页,并模拟点击操作。你也可以用PhantomJS
来处理下载下来的页面。
在StackOverflow上有很多关于这个话题的帖子,不过这里有一个可能对你有帮助的起点:用Python抓取JavaScript页面