HTTPError:HTTP 错误 403:禁止

Posted

技术标签:

【中文标题】HTTPError:HTTP 错误 403:禁止【英文标题】:HTTPError: HTTP Error 403: Forbidden 【发布时间】:2012-10-14 20:19:29 【问题描述】:

我制作了一个供个人使用的 python 脚本,但它不适用于***...

这项工作:

import urllib2, sys
from bs4 import BeautifulSoup

site = "http://youtube.com"
page = urllib2.urlopen(site)
soup = BeautifulSoup(page)
print soup

这不起作用:

import urllib2, sys
from bs4 import BeautifulSoup

site= "http://en.wikipedia.org/wiki/***"
page = urllib2.urlopen(site)
soup = BeautifulSoup(page)
print soup

这是错误:

Traceback (most recent call last):
  File "C:\Python27\wiki.py", line 5, in <module>
    page = urllib2.urlopen(site)
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 406, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden

【问题讨论】:

不要尝试抓取***页面。他们提供了一个非常好的 API,你应该使用它。 能给个链接吗?我刚读到他们允许你刮 @Loclip API 页面不言自明:en.wikipedia.org/w/api.php 【参考方案1】:

在当前代码内:

Python 2.X

import urllib2, sys
from BeautifulSoup import BeautifulSoup

site= "http://en.wikipedia.org/wiki/***"
hdr = 'User-Agent': 'Mozilla/5.0'
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
print soup

Python 3.X

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

site= "http://en.wikipedia.org/wiki/***"
hdr = 'User-Agent': 'Mozilla/5.0'
req = Request(site,headers=hdr)
page = urlopen(req)
soup = BeautifulSoup(page)
print(soup)

带有 Selenium 的 Python 3.X(javascript 函数执行)

from selenium import webdriver as driver

browser = driver.PhantomJS()
p = browser.get("http://en.wikipedia.org/wiki/***")
assert "Stack Overflow - Wikipedia" in browser.title

修改版本有效的原因是***检查用户代理是否属于“流行浏览器”

【讨论】:

参考您的Python 3代码,是否可以使用“请求”功能访问网页上的Javascript? 我们可以编写此代码的变体,它可以评估内联或外部 javascript。这将需要解析 html,选择相关标签。但我假设您想执行那些 javascript 函数并接收修改后的 DOM 元素。这是一个不平凡的练习。【参考方案2】:
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup
url = 'yourlink'
req = Request(url , headers='User-Agent': 'Mozilla/5.0')

webpage = urlopen(req).read()
page_soup = soup(webpage, "html.parser")

这对我有用,也应该对你有用!

【讨论】:

以上是关于HTTPError:HTTP 错误 403:禁止的主要内容,如果未能解决你的问题,请参考以下文章

urllib2.HTTPError:HTTP 错误 403:禁止

HTTPError:HTTP 错误 403:在 Google Colab 上被禁止

urllib.error.HTTPError:HTTP 错误 403:使用 urllib.requests 禁止

来自 Python AppEngine 的 Google Url Shortener API:HTTPError:HTTP 错误 403:禁止

Google Roads API - HTTP 错误 403:禁止

IIS 10.0 HTTP 错误 403.0 - 禁止