Ví dụ sử dụng bãi Wikipedia này:Phân tích một Wikipedia đổ
Có một thư viện hiện tại cho Python mà tôi có thể sử dụng để tạo ra một mảng với các bản đồ của các đối tượng và các giá trị?
Ví dụ:
{height_ft,6},{nationality, American}
Ví dụ sử dụng bãi Wikipedia này:Phân tích một Wikipedia đổ
Có một thư viện hiện tại cho Python mà tôi có thể sử dụng để tạo ra một mảng với các bản đồ của các đối tượng và các giá trị?
Ví dụ:
{height_ft,6},{nationality, American}
Dường như bạn thực sự muốn có thể phân tích cú pháp đánh dấu MediaWiki. Có một thư viện python được thiết kế cho mục đích này được gọi là mwlib. Bạn có thể sử dụng các gói XML tích hợp của python để trích xuất nội dung trang từ phản hồi của API, sau đó chuyển nội dung đó vào trình phân tích cú pháp của mwlib để tạo ra một biểu diễn đối tượng mà bạn có thể duyệt và phân tích trong mã để trích xuất thông tin bạn muốn. mwlib được cấp phép BSD.
Có một số thông tin về Python và XML thư viện here.
Nếu bạn đang yêu cầu có một thư viện hiện có được thiết kế để phân tích cú pháp XML (pedia) XML cụ thể và phù hợp với yêu cầu của bạn, điều này là đáng ngờ. Tuy nhiên, bạn có thể sử dụng một trong các thư viện hiện có để duyệt DOM và rút ra dữ liệu bạn cần.
Tùy chọn khác là viết biểu định kiểu XSLT tương tự và gọi nó bằng cách sử dụng lxml. Điều này cũng cho phép bạn thực hiện các cuộc gọi đến các hàm Python từ bên trong XSLT để bạn có được tốt nhất của cả hai thế giới.
Sheesh, tại sao downvote. Nếu câu trả lời của bạn tốt hơn, hãy để nó tự đứng vững - tôi không bị sai lầm. – imoatama
Tôi sẽ nói xem xét sử dụng Beautiful Soup và chỉ tải trang Wikipedia bằng HTML thay vì sử dụng API.
Tôi sẽ thử và đăng ví dụ.
Tôi biết đây là một câu hỏi cũ, nhưng đối với bất cứ ai tình cờ gặp điều này, hoàn toàn không ** KHÔNG ** làm điều này. Toàn bộ lý do Wikipedia cung cấp một API để họ có thể * hiệu quả * trả lại dữ liệu thô mà người dùng cần. Cào gây ra căng thẳng hoàn toàn không cần thiết trên máy chủ bằng cách gọi các công cụ hiển thị và bằng cách trả về * tất cả * nội dung bài viết. API bỏ qua hiển thị và có thể được sử dụng để chỉ kéo tập hợp con dữ liệu mà người dùng thực sự cần (ví dụ: chỉ một phần duy nhất). Cạo luôn luôn nên được sử dụng như một phương sách cuối cùng (tức là, nếu một trang web không cung cấp API). – Geoff
Và ngay cả khi HTML sẽ tiết lộ cấu trúc cơ bản một cách hoàn hảo, bạn vẫn sẽ phải hiểu khái niệm về mẫu, trang định hướng, chuyển hướng, v.v. Tốt hơn để xử lý nguồn ở nơi đồng bằng với đánh dấu hợp lý dựa trên ngữ nghĩa. – tripleee
Chỉ cần stumbled trên một thư viện trên PyPi, wikidump, mà tuyên bố để cung cấp
Công cụ để thao tác và trích xuất dữ liệu từ wikipedia bãi
tôi không sử dụng nó, vì vậy bạn một mình để thử nó ...
Có thể bạn đang tìm kiếm Pywikipediabot để thao tác API wikipedia.
Tôi đã mô tả cách thực hiện việc này bằng cách kết hợp pywikibot và mwparserfromhell trong this post (không có đủ danh tiếng để gắn cờ là trùng lặp).
In [1]: import mwparserfromhell
In [2]: import pywikibot
In [3]: enwp = pywikibot.Site('en','wikipedia')
In [4]: page = pywikibot.Page(enwp, 'Waking Life')
In [5]: wikitext = page.get()
In [6]: wikicode = mwparserfromhell.parse(wikitext)
In [7]: templates = wikicode.filter_templates()
In [8]: templates?
Type: list
String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
Length: 31
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
In [10]: templates[:2]
Out[10]:
[u'{{Use mdy dates|date=September 2012}}',
u"{{Infobox film\n| name = Waking Life\n| image = Waking-Life-Poster.jpg\n| image_size = 220px\n| alt =\n| caption = Theatrical release poster\n| director = [[Richard Linklater]]\n| producer = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer = Richard Linklater\n| starring = [[Wiley Wiggins]]\n| music = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing = Sandra Adair\n| studio = [[Thousand Words]]\n| distributor = [[Fox Searchlight Pictures]]\n| released = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country = United States\n| language = English\n| budget =\n| gross = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]
In [11]: infobox_film = templates[1]
In [12]: for param in infobox_film.params:
print param.name, param.value
name Waking Life
image Waking-Life-Poster.jpg
image_size 220px
alt
caption Theatrical release poster
director [[Richard Linklater]]
producer [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West
writer Richard Linklater
starring [[Wiley Wiggins]]
music Glover Gill
cinematography Richard Linklater<br />[[Tommy Pallotta]]
editing Sandra Adair
studio [[Thousand Words]]
distributor [[Fox Searchlight Pictures]]
released {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}
runtime 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>
country United States
language English
budget
gross $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>
Đừng quên rằng thông số đó cũng là các đối tượng mwparserfromhell!
Tôi biết câu hỏi cũ, nhưng tôi đã tìm kiếm một thư viện phân tích cú pháp wikipedia xml dump. Tuy nhiên, các thư viện được đề xuất, wikidump và mwlib, không cung cấp nhiều tài liệu mã. Sau đó, tôi tìm thấy Mediwiki-utilities, trong đó có một số tài liệu mã trong: http://pythonhosted.org/mediawiki-utilities/.
Dự án thú vị nhưng chỉ hoạt động với python 3 – GrantD71
WikiExtractor dường như là một cách sạch sẽ, đơn giản và hiệu quả để thực hiện điều này bằng Python hôm nay: https://github.com/attardi/wikiextractor
Nó cung cấp một cách dễ dàng để phân tích một Wikipedia đổ thành một cấu trúc tập tin đơn giản như vậy:
<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>
... nơi từng tài liệu trông giống như:
<doc id="2" url="http://it.wikipedia.org/wiki/Harmonium">
Harmonium.
L'harmonium è uno strumento musicale azionato con una tastiera, detta manuale.
Sono stati costruiti anche alcuni harmonium con due manuali.
...
</doc>
thx để được trợ giúp. Tôi đã thử hướng dẫn mwlib trong liên kết mà bạn đã cung cấp cho tôi Tuy nhiên tôi không chắc chắn làm cách nào để thao tác với đối tượng Bài viết được trả về bởi simpleparse. Ví dụ: làm cách nào để tôi xây dựng lại tất cả dữ liệu thành định dạng xml với tiêu đề phù hợp? – tomwu
Bất kỳ công cụ thực tế nào hiện đang hoạt động? –
@quantCode Tôi đã không trung thực xem xét trạng thái của những công cụ này trong những năm gần đây, nhưng kiểm tra nhanh về [repo Github của dự án] (https://github.com/pediapress/mwlib) cho thấy rằng mwlib vẫn thường xuyên, nếu không thường xuyên, cập nhật. Nó có lẽ vẫn còn giá trị một cái nhìn nếu bạn đang lập kế hoạch làm một cái gì đó trong không gian này. – chaos95