Python3 - Urllib& BeautifulSoup4提取特定文本

时间:2015-09-02 16:03:45

标签: python json twitter

我是python的新手,我正在努力让脚本与urllib和BeautifulSoup4一起工作以收集可通过emojitracker API流式传输的推文。它将特定表情符号的推文输出为.json文件。一个例子是这个链接(在chrome中打开): http://emojitracker.com/api/details/1F52B

我可以从.json获取所有文本,但我只想获取推文(在“text:”之后)。我环顾四周,有一个例子可以使用soup.findAll(“a”,class _ =“classname”)来获取页面上的所有链接。

我使用了inspect元素,发现我需要的推文存储为:(span class =“type-string”)推文到这里(/ span)。所以我尝试了以下内容:

from bs4 import BeautifulSoup
import urllib.request

url = "http://emojitracker.com/api/details/1F52B"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page.read(),"html.parser")
tweets = soup.findAll("span", class_"type-string")

for tweet in tweets:
    print (tweet.string)

跑步,它没有打印任何东西。我该怎么做才能打印出推文?

1 个答案:

答案 0 :(得分:0)

您提供的页面不是html页面。事实上,它被格式化为json文件,因此您无法将其视为HTML页面。

据我了解,您想要的是检索所有最近的推文。

为了做到这一点,我们像现在一样得到响应,并解析响应字符串并使用json库将其转换为Python字典(因为它不需要安装)标准库的一部分。)

如果您想这样做,我们可以编写以下代码:

import json
import urllib.request

url = "http://emojitracker.com/api/details/1F52B"
page = urllib.request.urlopen(url)
json = json.loads(str(page.read(), 'latin'))

for tweet in json['recent_tweets']:
    print(tweet['text'])

希望它有所帮助,