我正在尝试在这里编写一个Web scraper,并且该网站正在返回403禁止访问我的代码,即使它是通过浏览器访问的网页。我的主要问题是:他们在网站上设置的内容是为了阻止网络抓取还是我做错了什么?
import java.net.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://www.pcgs.com/prices/");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
如果我将网址更改为http://www.google.com这样的网站,则会返回html。如果该网站正在阻止,那么还有办法吗?谢谢你的帮助
答案 0 :(得分:2)
不太了解Java,但是这个简单的Python代码在我没有错误的情况下尝试了它,保存了我浏览器中出现的内容:
import requests
r = requests.get('http://www.pcgs.com/prices/')
with open('out.html', 'w') as f:
f.write(r.content)
这会发送slightly unusual, non-browser user-agent。
因此,如果他们的网站不太可能在用户代理的基础上阻止您,可能您过快地访问了网站并且他们阻止了您的IP地址或速率限制了您?如果您打算抓取网站,则应该nice and limit the number of requests you make。
在抓取之前你可以做的另一件事是检查网站的robots.txt
;喜欢Stack Overflow的这个;明确声明网站的政策是针对自动化刮刀的。 (在这种情况下,PCGS站点似乎没有。)
答案 1 :(得分:1)
Web服务器可能包含阻止未授权用户代理的代码。
我想您可以通过确保您的程序将发送标准的User-Agent值(即对应于现有的Web浏览器)并查看它是否有所不同来验证这一点。