【问题标题】:Python3 - Urllib & BeautifulSoup4 to Extract Specific TextPython3 - Urllib & BeautifulSoup4 提取特定文本
【发布时间】:2015-09-02 16:03:45
【问题描述】:

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

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

我使用了检查元素,发现我需要的推文存储为:(span class="type-string")tweet go here(/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)

运行,它没有打印任何东西。我怎样才能让它只打印出推文?

【问题讨论】:

  • soup.findAll("span", class_"type-string") 看起来不像是有效的语法。你确定你不是指soup.findAll('span', attrs={'class': 'type-string'})?
  • 我也试过了,但还是没有打印出来。

标签: python json twitter


【解决方案1】:

您提供的页面不是 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'])

希望对你有帮助,

【讨论】:

  • 这似乎是一种更好的处理方法,但是我收到一个错误:
  • TypeError:JSON 对象必须是 str,而不是 'bytes'。这是什么原因? json格式是否正确?
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2021-12-11
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多