从 bs4.element.tag 中提取标签返回空字符串
Posted
技术标签:
【中文标题】从 bs4.element.tag 中提取标签返回空字符串【英文标题】:Extracting tag from bs4.element.tag returns empty string 【发布时间】:2021-02-27 20:34:23 【问题描述】:我正在尝试按照教程从 Quora url 中提取所有答案。我的代码是这样的
url = 'https://www.quora.com/Should-I-move-to-London'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
answers = soup.find("script", "type": "application/ld+json")
answers
但是,当我尝试从答案(bs4.element.tag 对象)中获取文本时, 它只是显示为空。 如何提取所有答案? 我也尝试了以下
data = json.loads(soup.find('script', type='application/ld+json').text)
但我收到以下错误
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我附上一张bs4主体结构的截图
【问题讨论】:
我刚刚尝试了你的脚本和行:data = json.loads(soup.find('script', type='application/ld+json').text)
对我来说很好
我试过了..但我得到了和 OP 一样的错误
***.com/help/someone-answers
【参考方案1】:
您必须使用.string
来获取对象。
方法如下:
import json
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get('https://www.quora.com/Should-I-move-to-London').content, 'html.parser')
answers = soup.find("script", "type": "application/ld+json")
data = json.loads(answers.string)
print(data["mainEntity"]["answerCount"])
例如,打印:
12
要打印答案,请使用:
for number, answer in enumerate(data["mainEntity"]["suggestedAnswer"], start=1):
print(f"Answer: number. | Upvote count: answer['upvoteCount']")
print(answer["text"].strip())
print("-" * 80)
【讨论】:
这与我的回答不同吗?你要添加什么? 看看谁先发布了答案。 :-] 如何打印问题的答案? @AbrarAhmed 我已经更新了答案。 现在答案已经完成了。【参考方案2】:你需要调用.string
方法:
import json
import requests
from bs4 import BeautifulSoup
url = 'https://www.quora.com/Should-I-move-to-London'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
answers = soup.find("script", "type": "application/ld+json")
json_data = json.loads(answers.string)
>>> print(type(json_data))
<class 'dict'>
【讨论】:
以上是关于从 bs4.element.tag 中提取标签返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章
Python BS4.element.tag如何对此执行click()