【问题标题】:Web scraping using Python使用 Python 进行网页抓取
【发布时间】:2011-10-21 15:00:00
【问题描述】:

我正在尝试使用 urllib2 和 BeautifulSoup 抓取网站 http://www.nseindia.com。不幸的是,当我尝试通过 Python 访问该页面时,我不断收到 403 Forbidden。我认为这是一个用户代理问题,但改变它并没有帮助。然后我认为它可能与cookie有关,但显然通过关闭cookie的链接加载页面工作正常。什么可能会阻止通过 urllib 的请求?

【问题讨论】:

    标签: python urllib2 web-scraping


    【解决方案1】:

    http://www.nseindia.com/ 似乎需要一个 Accept 标头,无论出于何种原因。这应该有效:

    import urllib2
    r = urllib2.Request('http://www.nseindia.com/')
    r.add_header('Accept', '*/*')
    r.add_header('User-Agent', 'My scraping program <author@example.com>')
    opener = urllib2.build_opener()
    content = opener.open(r).read()
    

    拒绝没有Accept 标头的请求是不正确的; RFC 2616明确说明

    如果不存在 Accept 头字段,则假定 客户端接受所有媒体类型。

    【讨论】:

    • 不错的答案。出于好奇,您是如何发现这一点的?
    • @RoundTower 我捕获了一个工作请求(通过 Chromium),并在 Python 中添加了完全相同的标头。一旦它工作了,我尝试删除每个 HTTP 标头,直到它没有。
    • @phihag - 您是如何在 Chromium 中捕获工作请求的?我也可以在 Chrome 中这样做吗?
    • 我使用了Wireshark,但您也可以使用 Chromium 开发人员工具,只需按 F12 并转到 Network 选项卡。 Chrome 只是带有 Google 品牌的 Chromium,因此它也可以在那里(以及许多其他现代浏览器)运行。
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2021-05-08
    • 2018-07-20
    • 2021-01-13
    • 2020-03-13
    • 2016-02-10
    • 2021-01-31
    相关资源
    最近更新 更多