Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用urllib urlopen read函数但不获取任何_Python_Urlopen - Fatal编程技术网

Python 使用urllib urlopen read函数但不获取任何

Python 使用urllib urlopen read函数但不获取任何,python,urlopen,Python,Urlopen,[ 但是得到page='' 我的版本:2.7.6我尝试了这个URL,发现错误是由于HTTP错误301造成的。这应该是由这个网站的防蜘蛛机制造成的。你必须设计一个复杂的用户代理来获取页面,而不是仅仅一个简单的urlopen哼哼,我尝试使用python包,首先出现了一个错误: requests.exceptions.TooManyRedirects:超过30个重定向 它似乎从一个url重定向到另一个url,并像这样循环。也许它在使用urllib时失败了。 我还检查了urlopen的doc,似乎对ht

[

但是得到page=''


我的版本:2.7.6

我尝试了这个URL,发现错误是由于HTTP错误301造成的。这应该是由这个网站的防蜘蛛机制造成的。你必须设计一个复杂的用户代理来获取页面,而不是仅仅一个简单的
urlopen

哼哼,我尝试使用python包,首先出现了一个错误:
requests.exceptions.TooManyRedirects:超过30个重定向

它似乎从一个url重定向到另一个url,并像这样循环。也许它在使用urllib时失败了。 我还检查了urlopen的doc,似乎对https请求有一些问题

无论我发现了什么,这段代码都可以解决您的问题:

import requests

url='https://tools.usps.com/go/TrackConfirmAction.action?tRef=fullpage&tLc=1&text28777=&tLabels=LN594080445CN'

s = requests.session()
s.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'

response = s.get(url)
print response.text
创建会话修复有关最大重定向错误的错误。有关详细信息,请参阅。 在
response.text
中,您拥有所有代码页,我猜这就是您想要的

当然,您需要添加特定的用户代理。例如,有我的,但您的可能不同。您可以找到它
希望能有所帮助!

我建议不要在任何现代Python上下文中使用
urllib
,而是使用“”(“人类的HTTP”)

但在此之前,正如@Skyler所说,结果是重定向,您的第一站应该是查看
curl
报告的内容:

$ curl -I 'https://tools.usps.com/go/TrackConfirmAction.action?tRef=fullpage&tLc=1&text28777=&tLabels=LN594080445CN\]'
HTTP/1.1 301 Moved Permanently
Server: AkamaiGHost
Content-Length: 0
Location: https://www.usps.com/root/global/server_responses/webtools-msg.htm
Date: Wed, 31 Dec 2014 10:43:14 GMT
Connection: keep-alive
没什么大不了的,但你可以看到:

了解如何集成免费邮政服务®地址和 正在跟踪应用程序中的API,请访问 www.usps.com/webtools

这也很公平。我建议去那里注册。如果有合适的方法,那么删除HTML是没有意义的

但是,如果您真的想通过代码提取原始HTML:首先通过Curl让它工作

打开Chrome developer工具并重新加载页面。右键单击并查找“复制为卷曲”。您可以编辑链接。以下内容对我很有用,但可能需要进行更多修剪:

curl 'https://tools.usps.com/go/TrackConfirmAction.action?tRef=fullpage&tLc=1&text28777=&tLabels=LN594080445CN\]' \
-H 'Accept-Encoding: gzip, deflate, sdch' \
-H 'Accept-Language: en-US,en;q=0.8' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' \
--compressed
可以对其进行修剪。下面的代码适用于nice
请求模块:

import requests

headers = {
    'Accept-Language': 'en-US,en;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
}
r = requests.get('https://tools.usps.com/go/TrackConfirmAction.action?tRef=fullpage&tLc=1&text28777=&tLabels=LN594080445CN]', headers=headers)

print "Status: %s" % r.status_code
print "Content-type: %s" % r.headers['content-type']
print "Content length: %d" % len(r.text)
运行:

$ python demo.py
Status: 200
Content-type: text/html
Content length: 55142
更清洁:

params = {
    'tRef': 'fullpage',
    'tLc': '1',
    'text28777': '',
    'tLabels': 'LN594080445CN]',
}

r = requests.get('https://tools.usps.com/go/TrackConfirmAction.action',
        params=params,
        headers=headers)

正如我所说的,我认为这不是正确的选择。使用USPS API。

这可能是由于ssl或用户代理造成的。请指定您使用的Python版本以及导入模块的方式。当我复制您的代码并导入urllib
时,它会说
urllib
没有方法
urlopen
:)为什么要使用urllib?,是的,我必须做更多的事,我已经试过了,有时会出现另一个问题,不过,谢谢
params = {
    'tRef': 'fullpage',
    'tLc': '1',
    'text28777': '',
    'tLabels': 'LN594080445CN]',
}

r = requests.get('https://tools.usps.com/go/TrackConfirmAction.action',
        params=params,
        headers=headers)