0

次のコードを試してみても、計画どおりにうまくいかないようです: from beautifulsoup import BeautifulSoup

definition = """From encyclopedia:\n<i></i><p>Infobox Country<br>fullcountryname=Thailand  &#x0E23;&#x0E32;&#x0E0A;&#x0E2D;&#x0E32;&#x0E13;&#x0E32;&#x0E08;&#x0E31;&#x0E01;&#x0E23;&#x0E44;&#x0E17;&#x0E22;Raja-anachakra Thai <br>image_flag= Flag of Thailand.svg <br>image_coa= Coat of arms of Thailand.png <br>image_location= LocationThailand.png <br>nationalmotto= none <br>nationalsong= Phleng Chat <br>nationalflower= n/a <br>nationalanimal= n/a <br>officiallanguages= Thai (<r><i>Thai language</i></r>) <br>populationtotal= 65,444,371 <br>populationrank= 19 <br>populationdensity= 127 <br>countrycapital= <r>Bangkok</r> <br>countrylargestcity= <r>Bangkok</r> <br>areatotal= 514,000 <br>arearank= 49 <br>areawater= n/a <br>areawaterpercent= 0.4 <br>establishedin= <r>April 7</r>, <r>1782</r> <br>leadertitlename=    <br>currency= <r>Baht</r> <br>utcoffset= +7 <br>dialingcode= 66 <br>internettld= .th<p><b>Thailand</b> is a <r>country</r> in Southeast <r>Asia</r>.  Its edges touch <r>Laos</r>, <r>Cambodia</r>, <r>Malaysia</r>, and <r>Myanmar</r> (which is also called Burma.) Thailand was called Siam until 1949."""

print BeautifulSoup(definition).find('p[1]').text

これは何も返さない.. BeautifulSoupの使用による構文エラーだと確信しています.

Infobox Country
fullcountryname=Thailand Raja-anachakra Thai 
image_flag= Flag of Thailand. svg 
image_coa= Coat of arms of Thailand. png 
image_location= LocationThailand. png 
nationalmotto= none 
nationalsong= Phleng Chat 
nationalflower= n/a 
nationalanimal= n/a 
officiallanguages= Thai (Thai language) 
populationtotal= 65,444,371 
populationrank= 19 
populationdensity= 127 
countrycapital= Bangkok 
countrylargestcity= Bangkok 
areatotal= 514,000 
arearank= 49 
areawater= n/a 
areawaterpercent= 0. 4 
establishedin= April 7, 1782 
leadertitlename=  
currency= Baht 
utcoffset= +7 
dialingcode= 66 
internettld= . th

ありがとうございました :)

編集:「Infobox」という単語と最後の単語の間のテキストを取得できれば、実際には望ましいと思います

タグを付けて、スクリプトを使用してライブ ウィキペディア ページを解析できるようにしました。

4

3 に答える 3

4

find()最初の要素にのみ一致するため、を使用してfind('p')ください。

>>>print BeautifulSoup(definition).find('p').text
Infobox Countryfullcountryname=Thailand  &#x0E23;&#x0E32;&#x0E0A;&#x0E2D;&#x0E32;&#x0E13;&#x0E32;&#x0E08;&#x0E31;&#x0E01;&#x0E23;&#x0E44;&#x0E17;&#x0E22;Raja-anachakra Thaiimage_flag= Flag of Thailand.svgimage_coa= Coat of arms of Thailand.pngimage_location= LocationThailand.pngnationalmotto= nonenationalsong= Phleng Chatnationalflower= n/anationalanimal= n/aofficiallanguages= Thai (Thai language)populationtotal= 65,444,371populationrank= 19populationdensity= 127countrycapital=Bangkokcountrylargestcity=Bangkokareatotal= 514,000arearank= 49areawater= n/aareawaterpercent= 0.4establishedin=April 7,1782leadertitlename=currency=Bahtutcoffset= +7dialingcode= 66internettld= .th
于 2012-04-28T11:55:42.110 に答える
0

BeautifulSoupがサポートしていないXPath構文を使用しています。Lattywareの答えは正しいです。編集中の質問については、Beautiful Soup 4の.stripped_stringsジェネレーターを使用して、おおよそ必要なものを取得できます。いくつかのサンプルコード:

from bs4 import BeautifulSoup
soup = BeautifulSoup(definition)

import re
infobox_start = re.compile("^Infobox") 

start_at = soup.find(text=infobox_start)
for string in start_at.parent.stripped_strings:
    print string
于 2012-04-28T11:59:03.657 に答える
0

探しているのが Infobox である場合、DBpediaは強力なプログラムによるデータへのより安定したアクセスを提供することに気付くかもしれません。もちろん、Wikipedia API とpython wikitoolsもこれを提供します。

これらのソリューションには学習曲線がありますが、スクレイピングよりも安定しており、サイトを尊重している可能性があります。

于 2012-05-02T10:48:56.013 に答える