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