从禁止返回403的网站读取HTML

时间:2014-05-15 15:31:26

标签: java html web-scraping

我正在尝试在这里编写一个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。如果该网站正在阻止,那么还有办法吗?谢谢你的帮助

2 个答案:

答案 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浏览器)并查看它是否有所不同来验证这一点。