我正在使用mwparserfromhell
解析WikiMedia文本。
我需要从页面获取地点。
例如,当我使用API查询Muriel时
(Wiki Link),我可以在filter_headings()
解析后得到所有标题。现在我需要在标题下获取内容。
我可以获得标题("地方"),但如何获取其内容?
这是代码。任何帮助将不胜感激。
import mwparserfromhell
import urllib.request
import urllib.parse
import json
def main():
search('muriel')
def search(name):
wiki_parsed = get_json(name, True)
headings = wiki_parsed.filter_headings()
filtered_headings = [heading
for heading in headings
if heading.title == 'Places']
if len(filtered_headings) > 0:
print(filtered_headings[0])
# ===================================
# need to get the content inside heading
#
# ?????????????????????????????????????
def get_json(name, ignore_cache=False):
url = 'https://en.wikipedia.org/w/api.php'
args = {'action': 'query',
'titles': name,
'prop': 'revisions',
'rvprop': 'content',
'format': 'json'}
content = get_url_content(url, args)
data = json.loads(content)
wiki_text = (list(data['query']['pages'].values())[
0]['revisions'][0]['*'])
parsed = mwparserfromhell.parse(wiki_text)
return parsed
def get_url_content(url, req_params):
url = url + '?' + urllib.parse.urlencode(req_params)
fp = urllib.request.urlopen(url)
str_content = fp.read().decode('utf-8', 'ignore')
fp.close()
return str_content
if __name__ == "__main__":
main()
答案 0 :(得分:0)
在MediaWiki语法中,内容并非真正"内部"部分,部分标题更像是锚点,页面上的标记。这意味着你可以做像
这样的事情== section 1 ==
{|
|
== section 2 ==
|}
将导致
<h2>section 1</h2>
<table>
<tr>
<td>
<h2>section 2</h2>
</td>
</tr>
</table>
在这种情况下,第1部分的内容是什么?