ste*_*fen 2 python urllib http-status-code-403
我正在尝试使用Python下载一些内容urllib.request.以下命令会产生异常:
import urllib.request
print(urllib.request.urlopen("https://fpgroup.foreignpolicy.com/foreign-policy-releases-mayjune-spy-issue/").code)
Run Code Online (Sandbox Code Playgroud)
结果:
...
HTTPError: HTTP Error 403: Forbidden
Run Code Online (Sandbox Code Playgroud)
如果我使用firefox或链接(命令行浏览器)我得到的内容和状态代码为200.如果我使用lynx,很奇怪,我也得到403.
我希望所有方法都有效
为什么不是这样?
该网站最有可能阻止人们刮取他们的网站.您可以通过包含标题信息以及其他内容来在基本级别欺骗它们.有关详细信息,请参见此处
引自:https://docs.python.org/3/howto/urllib2.html#headers
import urllib.parse
import urllib.request
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data, headers)
with urllib.request.urlopen(req) as response:
the_page = response.read()
Run Code Online (Sandbox Code Playgroud)
人们不希望脚本刮掉他们的网站有很多原因.它需要一个带宽.他们不希望人们通过制作刮刀机器人来获益(金钱方面).也许他们不希望您复制他们的网站信息.你也可以把它想象成一本书.作者希望人们阅读他们的书籍,但也许他们中的一些人不希望机器人扫描他们的书籍,创建副本,或者机器人可能会总结它.
在评论中你的问题的第二部分是模糊和广泛回答这里,因为有太多的自以为是的答案.
| 归档时间: |
|
| 查看次数: |
3709 次 |
| 最近记录: |