【问题标题】:Web scraping with python 3 HTTP code error [duplicate]使用python 3 HTTP代码错误进行Web抓取[重复]
【发布时间】:2020-07-30 08:27:35
【问题描述】:

所以我对编码很陌生,我只是在学习网络抓取。

我不确定如何处理这个,它可能是基本的东西。但再次不确定我在这里做错了什么 对于你们中的一些人来说,这可能是一个非常简单的解决方案。任何帮助都非常感谢

from urllib.request import urlopen as uReq

dcgp_url = "http://news.formulad.com/"

uClient = uReq(dcgp_url)
page_html = uClient.read
uClient.close()

然后它向我显示此错误:

C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\python.exe "E:/Discord Bot/Web scraping.py"
Traceback (most recent call last):
  File "E:/Discord Bot/Web scraping.py", line 7, in <module>
    uClient = uReq(dcgp_url)
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 640, in http_response
    response = self.parent.error(
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 502, in _call_chain
    result = func(*args)
  File "C:\Users\mateu\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

Process finished with exit code 1

【问题讨论】:

  • HTTP 错误 403 表示您无权访问您请求的 url。这可能是因为您使用的是刮刀。设置用户代理应该可以解决它(请检查网站的法律文档以验证这是否合法)。
  • 完全不知道为什么你会得到一个带有 urllib 的 403 但使用 requests 模块,它似乎工作。 w3schools.com/python/module_requests.asp

标签: python http urllib


【解决方案1】:

正如herehere 所解释的,您要访问的网站会拒绝未识别用户代理的GET 请求。您可以通过在 Google 中搜索“我的用户代理”找到您的用户代理。

以下代码应该可以工作:

from urllib.request import urlopen, Request

dcgp_url = "http://news.formulad.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
req = Request(url=dcgp_url, headers=headers) 
uClient = urlopen(req)
page_html = uClient.read()
uClient.close()

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 2019-01-09
    • 2017-06-12
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多