![](/img/trans.png)
[英]How to scrape and extract same specific information from multiple URLs in a list
[英]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.