python与html交互出现403错误_在Python 3网页抓取HTTP错误403(HTTP error 403 in Python 3

我试图放弃练习一个网站,但我一直在得到HTTP错误403(它认为我是个机器人)?

这里是我的代码:

#import requests

import urllib.request

from bs4 import BeautifulSoup

#from urllib import urlopen

import re

webpage = urllib.request.urlopen('http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1').read

findrows = re.compile('

(.*)')

row_array = re.findall(findrows, webpage)

links = re.finall(findlink, webpate)

print(len(row_array))

iterator = []

我得到的错误是:

File "C:\Python33\lib\urllib\request.py", line 160, in urlopen

return opener.open(url, data, timeout)

File "C:\Python33\lib\urllib\request.py", line 479, in open

response = meth(req, response)

File "C:\Python33\lib\urllib\request.py", line 591, in http_response

'http', request, response, code, msg, hdrs)

File "C:\Python33\lib\urllib\request.py", line 517, in error

return self._call_chain(*args)

File "C:\Python33\lib\urllib\request.py", line 451, in _call_chain

result = func(*args)

File "C:\Python33\lib\urllib\request.py", line 599, in http_error_default

raise HTTPError(req.full_url, code, msg, hdrs, fp)

urllib.error.HTTPError: HTTP Error 403: Forbidden

Answer 1:

这可能是因为mod_security或阻止已知的蜘蛛/机器人用户代理一些类似的服务器安全功能( urllib使用有点像python urllib/3.3.0 ,它很容易检测)。 尝试设置一个已知的浏览器的用户代理有:

from urllib.request import Request, urlopen

req = Request('http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1', headers={'User-Agent': 'Mozilla/5.0'})

webpage = urlopen(req).read()

这对我的作品。

顺便说一句,在你的代码你缺少的()后.read中urlopen线,但我认为这是一个错字。

提示:因为这是锻炼,选择一个不同的,非限制性的网站。 也许他们是阻塞urllib出于某种原因...

Answer 2:

当然它的阻止,因为你使用的urllib的基于用户代理的。 这同样的事情发生在我身上带OfferUp。 您可以创建一个名为AppURLopener新的类,它覆盖的用户代理和Mozilla。

import urllib.request

class AppURLopener(urllib.request.FancyURLopener):

version = "Mozilla/5.0"

opener = AppURLopener()

response = opener.open('http://httpbin.org/user-agent')

资源

Answer 3:

“这可能是因为mod_security的或阻止已知一些类似的服务器安全功能

蜘蛛/机器人

如已经斯特凡诺圣菲利波提到的 - 用户代理(urllib的使用有点像蟒蛇的urllib / 3.3.0,它很容易检测)”

from urllib.request import Request, urlopen

url="https://stackoverflow.com/search?q=html+error+403"

req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

web_byte = urlopen(req).read()

webpage = web_byte.decode('utf-8')

该web_byte是由服务器和存在于网页中的内容类型返回的字节对象主要是UTF-8。 因此,你需要用解码方法来解码web_byte。

而我在尝试使用PyCharm网站放弃这解决了完整的问题

PS - >我使用Python 3.4

Answer 4:

由于页作品在浏览器,而不是Python程序内调用时,似乎那个供应的Web应用程序的URL识别您浏览器请求内容不。

示范:

curl --dump-header r.txt http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1

...

Access Denied

Access Denied

You don't have permission to access ...

在r.txt内容有状态行:

HTTP/1.1 403 Forbidden

尝试张贴标题“用户代理”,这假货的Web客户端。

注:该页面包含Ajax调用创建你可能要解析表。 你需要检查页面的JavaScript逻辑,或者干脆利用浏览器的调试器(如Firebug / Net选项卡),看看哪些URL您需要调用来获取表的内容。

Answer 5:

您可以尝试两种方式。 细节是在这个环节 。

1)通过PIP

PIP安装--upgrade CERTIFI

2)如果它不工作,尝试运行与Python 3 *捆绑为Mac一个Cerificates.command:(转到你的Python安装位置,然后双击该文件)

打开/应用/ Python的\ 3。* /安装\ Certificates.command

文章来源: HTTP error 403 in Python 3 Web Scraping

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值