如何 Extract/Scrape 来自维基数据 URL 的特定信息部分
How to Extract/Scrape a specific part of information from WikiData URLs
我有一个要从 WikiData 网站上抓取的 webid 列表。这里以两个链接为例。
https://www.wikidata.org/wiki/Special:EntityData/Q317521.jsonld
https://www.wikidata.org/wiki/Special:EntityData/Q478214.jsonld
我只需要URL的第一套“P31”。对于第一个 URL,我需要的信息将是 "wd:Q5"
,第二个 URL 将是 ["wd:Q786820", "wd:Q167037", "wd:Q6881511","wd:Q4830453","wd:Q431289","wd:Q43229","wd:Q891723"]
,并将它们存储到列表中。
当我使用查找并输入“P31”时,我只需要所有结果中的第一个结果。上图说明了
输出将如下所示。
info = ['wd:Q5',
["wd:Q786820", "wd:Q167037", "wd:Q6881511","wd:Q4830453","wd:Q431289","wd:Q43229","wd:Q891723"],
]
lst = ["Q317521","Q478214"]
for q in range(len(lst)):
link =f'https://www.wikidata.org/wiki/Special:EntityData/{q}.jsonld'
page = requests.get(link)
soup = BeautifulSoup(page.text, 'html.parser')
之后,我不知道如何从第一组“P31”中提取信息。我正在使用 request, BeautifulSoup, and Selenium
库,但我想知道除了使用 XPath 或 Class 之外,还有什么更好的方法来 scrape/extract 来自 URL 的信息?
非常感谢!
您只需要 requests
,因为您会收到 JSON 回复。
您可以使用一个函数来循环相关的 JSON 嵌套对象并在第一次出现目标键时退出,同时将相关值附加到列表中。
循环变量应该是要添加到请求的 url 中的 ID。
import requests
lst = ["Q317521","Q478214"]
info = []
def get_first_p31(data):
for i in data['@graph']:
if 'P31' in i:
info.append(i['P31'])
break
with requests.Session() as s:
s.headers = {"User-Agent": "Safari/537.36"}
for q in lst:
link =f'https://www.wikidata.org/wiki/Special:EntityData/{q}.jsonld'
try:
r = s.get(link).json()
get_first_p31(r)
except:
print('failed with link: ', link)
我有一个要从 WikiData 网站上抓取的 webid 列表。这里以两个链接为例。
https://www.wikidata.org/wiki/Special:EntityData/Q317521.jsonld https://www.wikidata.org/wiki/Special:EntityData/Q478214.jsonld
我只需要URL的第一套“P31”。对于第一个 URL,我需要的信息将是 "wd:Q5"
,第二个 URL 将是 ["wd:Q786820", "wd:Q167037", "wd:Q6881511","wd:Q4830453","wd:Q431289","wd:Q43229","wd:Q891723"]
,并将它们存储到列表中。
输出将如下所示。
info = ['wd:Q5',
["wd:Q786820", "wd:Q167037", "wd:Q6881511","wd:Q4830453","wd:Q431289","wd:Q43229","wd:Q891723"],
]
lst = ["Q317521","Q478214"]
for q in range(len(lst)):
link =f'https://www.wikidata.org/wiki/Special:EntityData/{q}.jsonld'
page = requests.get(link)
soup = BeautifulSoup(page.text, 'html.parser')
之后,我不知道如何从第一组“P31”中提取信息。我正在使用 request, BeautifulSoup, and Selenium
库,但我想知道除了使用 XPath 或 Class 之外,还有什么更好的方法来 scrape/extract 来自 URL 的信息?
非常感谢!
您只需要 requests
,因为您会收到 JSON 回复。
您可以使用一个函数来循环相关的 JSON 嵌套对象并在第一次出现目标键时退出,同时将相关值附加到列表中。
循环变量应该是要添加到请求的 url 中的 ID。
import requests
lst = ["Q317521","Q478214"]
info = []
def get_first_p31(data):
for i in data['@graph']:
if 'P31' in i:
info.append(i['P31'])
break
with requests.Session() as s:
s.headers = {"User-Agent": "Safari/537.36"}
for q in lst:
link =f'https://www.wikidata.org/wiki/Special:EntityData/{q}.jsonld'
try:
r = s.get(link).json()
get_first_p31(r)
except:
print('failed with link: ', link)