爬取限制脚本访问的网站

1 投票
1 回答
2224 浏览
提问于 2025-05-01 16:10

我之前用一个Python脚本(urllib)抓取一个网站的数据。现在这个网站似乎在屏蔽我的请求,每当我用脚本请求网页时,得到的HTML里有一些JavaScript,但没有我想要的数据。而我用浏览器访问这个网站却没问题。我尝试把“User-agent”改成和我浏览器一样的,但还是没用。我注意到一个奇怪的现象,就是在我用浏览器打开一个页面后,脚本也能访问这个页面。

所以我有几个问题:

  1. 服务器是怎么知道请求不是来自浏览器的(即使我改了User-agent)?
  2. 是什么机制导致只有在浏览器加载网页后,才能通过脚本访问?是缓存吗?如果是,那缓存是在哪里发生的?
  3. 有什么建议可以继续进行吗?(我有一个不太优雅的解决方案,就是让我浏览器先打开每个页面,然后再用脚本加载,但这太耗时间了)

谢谢!

暂无标签

1 个回答

1

根据现有的信息来看,这个网站可能更新了,加入了一个叫做JavaScript加载器的东西。urllib这个工具无法处理JavaScript,所以它就没法继续工作了。(这只是我的猜测)

网站有很多方法可以阻止爬虫程序访问,比如通过JavaScript设置或更新一个cookie,或者以某种方式修改会话,以通过这个初步的检测。这些方法完全依赖于具体的网站,所以你需要自己去研究一下。

通常的解决办法是使用一个能处理JavaScript的爬虫工具,比如Selenium。这个工具实际上会使用你电脑上安装的FirefoxChromeIE浏览器来打开网页,并模拟点击操作。你也可以用PhantomJS来处理下载下来的页面。

在StackOverflow上有很多关于这个话题的帖子,不过这里有一个可能对你有帮助的起点:用Python抓取JavaScript页面

撰写回答