我最近一直在尝试一些网页抓取解决方案
我试图提取嵌入网页(https://www.instagram.com/p/BxII02-A9wb/)中的JSON代码的特定元素
我感兴趣的是将评论部分的细节与文本和作者细节分离开来:
"comment":[
{
"@type":"Comment",
"text":"Pior operadora de sempre, nunca vi uma internet t\\u00e3o lenta como a vossa, fico feliz em dizer que quando o contrato acabar vou mudar para a Vodafone, \\u00e9 mais barato e tem uma qualidade de net no m\\u00ednimo 10 vezes melhor. Recomendo a todos a vodafone ou at\\u00e9 mesmo a MEO que pode n\\u00e3o ser perfeita mas sempre \\u00e9 melhor que a NOS( o que n\\u00e3o \\u00e9 dif\\u00edcil)",
"author":{
"@type":"Person",
"alternateName":"@filipe389",
"mainEntityofPage":{
"@type":"ProfilePage",
"@id":"https:\\/\\/www.instagram.com\\/filipe389\\/"
}
}
}
]
我使用BeautifulSoup和Selenium来执行抓取任务,并使用json.loads来处理json部分(在隔离它之后)。但是当我试图访问评论部分的内容时,我无法访问我想要的数据:
for data in jsonData:
if data == "comment":
results.append(data) #also tried results.append(data[6]) and results.append(data['comment')
我认为我的问题是我处理的是字符串而不是字典,但到目前为止,我还没有找到一个有效的解决方案
我也在尝试应用正则表达式,但到目前为止还没有找到任何可行的解决方案
这是我的密码:
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import json
url = "https://www.instagram.com/p/BxII02-A9wb/"
browser = webdriver.Chrome()
browser.get(url)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
insta_data = soup.find_all("script", type="application/ld+json")
for contents in insta_data:
contents.text
jsonData = json.loads(contents.text)
results = []
for data in jsonData:
if data == "comment":
results.append(data)
print(results)
browser.close()
基本上我想访问信息,比如评论itsef
“在sempre歌剧院,我们的互联网是一个很好的选择,它与沃达丰的音乐有着天壤之别,它是一个很好的选择。”。建议沃达丰的todos ou,以确保其性能符合以下要求(请参见第4部分)
以及作者handlename“@filipe389”
在我在这里发布的示例中,返回时只得到“comment”,使用时得到“t” 结果。追加(数据[6])
欢迎任何提示或建议
谢谢
米格尔
如上所述,不需要迭代。但是,如果您正在通过字典创建,并且同时需要键和值,则需要使用
.items()
:我不想重复,只是想向您展示您的代码:
由于json/dictionary具备您所需的功能,只需使用数据结构的键和索引直接调用您所需的功能:
输出:
相关问题 更多 >
编程相关推荐