簡體   English   中英

如何從 WikiData URL 中提取/抓取信息的特定部分

[英]How to Extract/Scrape a specific part of information from WikiData URLs

我有一個我想從 WikiData 網站上抓取的 webid 列表。 這里以兩個鏈接為例。

https://www.wikidata.org/wiki/Special:EntityData/Q317521.jsonldhttps://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”時,我只需要所有結果中的第一個結果。 上圖說明了

output 看起來像這樣。

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”中提取信息。 I am using request, BeautifulSoup, and Selenium libraries but I am wondering are there any better ways to scrape/extract that information from the URL besides using XPath or Class?

太感謝了!

當您收到 JSON 響應時,您只需要requests

您可以使用 function 循環相關的 JSON 嵌套 object 並在第一次出現目標鍵時退出,同時將關聯的值附加到您的列表中。

循環變量應該是為請求添加到 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM