【问题标题】:Reading HTML from a website returning 403 forbidden [duplicate]从返回 403 禁止的网站读取 HTML [重复]
【发布时间】:2014-05-15 15:31:25
【问题描述】:

我正在尝试在此处编写网络爬虫,并且该网站正在向我的代码返回 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。如果该网站被阻止,有没有办法解决这个问题?感谢您的帮助

【问题讨论】:

  • 是的。你正在做他们积极劝阻的事情。当然,您可能可以使用像 selenium 这样的工具来绕过它......但是当/如果他们检测到它时,他们可能会阻止您的 IP 地址。
  • 谢谢,我认为更好的方法是找到一个不会阻止我的程序的页面。

标签: java html web-scraping


【解决方案1】:

不太懂 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 网站似乎没有。)

【讨论】:

    【解决方案2】:

    网络服务器可能包含一个代码来阻止未经授权的用户代理。

    我想你可以通过确保你的程序发送一个标准的 User-Agent 值(即对应于现有的网络浏览器)来验证这一点,看看它是否有任何区别。

    【讨论】:

    • 有时是这样,但这里不太可能;看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2011-05-31
    • 2021-09-18
    • 2013-11-28
    相关资源
    最近更新 更多