Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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.request.urlopen行为异常。第二天不返回数据。为什么?_Python_Json_Urllib - Fatal编程技术网

Python urllib.request.urlopen行为异常。第二天不返回数据。为什么?

Python urllib.request.urlopen行为异常。第二天不返回数据。为什么?,python,json,urllib,Python,Json,Urllib,我正在尝试使用URL阅读Twitter提要。昨天,我使用该代码获得了大约80K条推文,由于我的机器上有一些更新,我的Mac终端在python代码完成之前就停止了响应 今天,同样的代码没有返回任何json数据。它给了我空洞的结果。而如果我在浏览器中键入相同的URL,我就能够得到一个包含完整数据的json文件 这是我的密码: 方法1: try: urllib.request.urlcleanup() response = urllib.request.urlopen(url)

我正在尝试使用URL阅读Twitter提要。昨天,我使用该代码获得了大约80K条推文,由于我的机器上有一些更新,我的Mac终端在python代码完成之前就停止了响应

今天,同样的代码没有返回任何json数据。它给了我空洞的结果。而如果我在浏览器中键入相同的URL,我就能够得到一个包含完整数据的json文件

这是我的密码: 方法1:

try:
    urllib.request.urlcleanup()
    response = urllib.request.urlopen(url)
    print('URL to  used: ', url)
    testURL = response.geturl()
    print('URL you used: ', testURL)
    jsonResponse = response.read()
    jsonResponse = urllib.request.urlopen(url).read()
这本书是:

URL to  used:  https://twitter.com/i/search/timeline?f=tweets&q=%20since%3A2017-08-14%20until%3A2017-08-15%20USA&src=typd&max_position=
URL you used:  https://twitter.com/i/search/timeline?f=tweets&q=%20since%3A2017-08-14%20until%3A2017-08-15%20USA&src=typd&max_position=
json:  {'items_html': '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n', 'focused_refresh_interval': 30000, 'has_more_items': False, 'min_position': 'TWEET--', 'new_latent_count': 0}
****方法2:**

try:
    request = urllib.request.Request(url, headers=headers)
except:
    print("Thats the problem here:")

try:
    response = urllib.request.urlopen(request)
except:
    print("Exception while fetching response")

testURL = response.geturl()
print('URL you used: ', testURL)

try:
    jsonResponse = response.read()
except:
    print("Exception while reading response")
两种情况下的结果相同


请帮忙

根据我的测试,此行为与
urllib
无关。例如,
请求
库也会发生同样的情况

Twitter似乎根据您的IP地址和用户代理(UA)字符串,通过重复点击搜索URL来检测自动抓取。在某些时候,后续的点击返回空结果。这似乎发生在一天左右之后,可能是推特延迟分析的结果

如果更改搜索URL请求头中的UA字符串,则应再次在响应中收到有效结果。Twitter可能会在一段时间后再次阻止您,因此您需要经常更改UA字符串

我假设Twitter会在超时后终止这些块,但我不知道需要多长时间

作为参考,演示如何使用从包含多个UA字符串的文件中提取的半随机UA字符串


此外,该项目使用了一个硬编码的UA字符串,它在我第一次测试后一天左右停止工作。更改代码中的字符串(添加随机字符)导致恢复先前的功能。

我得到与您相同的响应。这很奇怪,对吧。。有时候我能理解,有时候不行,我在浏览器中也没有得到合理的回应。是的,我完全同意你的回应。我也测试过这个。当我换了一个不同的IP地址时,一切都很顺利。响应2中没有最小位置。时间线搜索响应2中没有json。响应为空,最好分别测试和分析原因。