当我调用twitter API时,它会给我一个JSON字符串的tweets
例如示例
data = {“ created_at”:“ Mon Apr 22 22:45:05 +0000 2019”,“ text”:“刚刚确认!Mark Derdzinski,数据科学家@dexcom加入了我们的数据科学小组! ,Mark st \ u2026 https://t.co/sPNgvMvx9t","extended_tweet":{"full_text“:”刚刚确认!Mark Derdzinski,数据科学家@dexcom正在加入我们的数据科学小组!病人,商业和设备数据,以产生可操作的业务见解并改善患者结果。#dexcom #datascienceday #techsandiego #ucsd https://t.co/89ktI7jKI3“,” display_text_range“:[0,276]}
当我检查显示为str的类型时。 解析我使用
转换为dicta = json.loads(data)
由此,我试图解析[“ extended_text”] [“ full_text”]以获取完整的推文
但是我得到了UnicodeError,因此在查看了几个线程之后,我发现我必须对字符串进行编码并使用以下代码
y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')
但是当我尝试打印(y)如果full_tweet包含链接时,它不是干净的,并且按原样显示。
所以我打算用下面的代码(在网上以及#begineerlife都可以找到)清理推文
URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
我收到类型错误
TypeError: can't use a string pattern on a bytes-like object
请帮助我解决问题,我不确定如何解析干净的推文。
完整代码如下
def on_data(self, data):
y = json.loads(data)
try:
y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')
print(type(y))
URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
print(URLless_string)
except KeyError:
y = y['text'].encode(encoding='UTF-8')
print(type(y))
URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
print(URLless_string)
之所以使用try and Expect方法是因为 有些推文没有Full_tweets,所以我只需要依靠dict对象上的[“ text”]键即可。
如果您可以帮助我完善对代码也有很大帮助的代码。
谢谢。