2016-08-20 36 views
1

我通常使用美麗的湯與python從頁面提取數據。我有一種奇怪的情況,他們以非常不切實際的方式投入投入。從高度非結構化的網頁中提取數據

這是頁面 http://dsalsrv02.uchicago.edu/cgi-bin/app/kadirvelu_query.py?page=2

在源的檢查,我發現它的這種方式存儲

1) <a href="/cgi-bin/app/kadirvelu_query.py?qs=அகங்காரவிர்த்தி&searchhws=yes"><hw>அகங்காரவிர்த்தி</hw></a> akangkāravirtti (<a href="/cgi-bin/app/kadirvelu_query.py?page=2">p. 2</a>) நானென்னும்வடிவுஞானம். 
<br> 
2) <a href="/cgi-bin/app/kadirvelu_query.py?qs=அகங்காரான்ம ஞானம்&searchhws=yes"><hw>அகங்காரான்ம ஞானம்</hw></a> akangkārāṉm ஞானம் (<a href="/cgi-bin/app/kadirvelu_query.py?page=2">p. 2</a>) அகங்காரமேஆன்மாவெனக்கொள்ளும் அறிவு. 
<br> 

因此,任何查詢不能取我所需的

輸出அகங்காரவிர்த்தி, akangkāravirtti,நானென்னும்வடிவுஞானம்

這是什麼,但 字,它的英文音譯,含義。

目前我使用下面的代碼來獲得一個破型輸出

for a in soup.findAll('a'): 
     print >> f , a.text.encode('utf8') 

回答

1

的HTML是可怕的,運行它通過w3c validator161錯誤,82個警告,得到你想要的文字需要一點做的,但這應該得到你想要的東西:

from bs4 import BeautifulSoup 
import requests 

soup = BeautifulSoup(requests.get(url).content) 
strings = [[a.text.strip(), a.find_next_sibling(text=True).strip("() \n"), a.find_next("br").find_previous(text=True).strip("\n)")] for a in soup.select("a[href^=/cgi-bin/app/kadirvelu_query.py?qs=]")] 

它給你:

In [17]: for a,b, c in strings: 
       print(u"a = {}".format(a)) 
       print(u"b = {}".format(b)) 
       print(u"c = {}".format(c)) 
    ....:  
a = அகங்காரவிர்த்தி 
b = akangkāravirtti 
c = நானென்னும்வடிவுஞானம். 
a = அகங்காரான்ம ஞானம் 
b = akangkārāṉm ஞானம் 
c = அகங்காரமேஆன்மாவெனக்கொள்ளும் அறிவு. 
a = அகங்காரி 
b = akangkāri 
c = செருக்குடையவன், கர்வி. 
a = அகங்காழ் 
b = akangkāẕ 
c = அகக்காழ். 
a = அகங்கை 
b = akangkai 
c = உள்ளங்கை. 
a = அகசன் 
b = akacaṉ 
c = கேது. 
a = அகசியக்காரன் 
b = akaciyakkāraṉ 
c = விதூஷகன். 
a = அகசியக்கூத்து 
b = akaciyakkūttu 
c = பகடிக்கூத்து. 
a = அகசியம் 
b = akaciyam 
c = ஆசியம், வேடிக்கை. 
a = அகச்சத்தாதுவித்தசமாதி 
b = akaccattātuvittacamāti 
c = ஆறு சமாதிகளில் ஒன்று. 
a = அகச்சுவை 
b = akaccuvai 
c = நாடகரசத்தொன்று, ஞானம். 
a = அகடச்சக்கரம் 
b = akaṭaccakkaram 
c = உதரபந்தனம் என்னுமணி. 
a = அகடிதகடநா 
b = akaṭitakaṭanā 
c = மாயாகாரியஞ்செய்தல். 
a = அகடியம் 
b = akaṭiyam 
c = அநீதி. 
a = அகடூரி 
b = akaṭūri 
c = பாம்பு. 
a = அகட்டுத்தே 
b = akaṭṭuttē 
c = விநாயகன். 
a = அகணித பஞ்சாங்கம் 
b = akaṇit பஞ்சாங்கம் 
c = அலகிடாதுசொல்லும் பஞ்சாங்கம். 
a = அகணிதபஞ்சாங்கி 
b = akaṇitapañcāngki 
c = கணியாதபஞ்சாங்கஞ்சொல்வோன். 
a = அகண் 
b = akaṇ 
c = அருகு. 
a = அகண்டஞானம் 
b = akaṇṭañāṉam 
c = பரிபூரணஞானம். 
a = அகண்டவடிவம் 
b = akaṇṭavaṭivam 
c = நீக்கமற்றசொரூபம். 
a = அகண்டவாக்கியம் 
b = akaṇṭavākkiyam 
c = விட்டும் விடாதவிலக்கணை. 
a = அகண்டாகண்டன் 
b = akaṇṭākaṇṭaṉ 
c = பரப்பிரமம்,கடவுள் 
a = அகண்டாகாரஞானம் 
b = akaṇṭākārañāṉam 
c = பரிபூரணஞாநம் 
a = அகண்டாகாரம் 
b = akaṇṭākāram 
c = விசாலம்,அளவுபடாதவடிவம். 
a = அகண்டாகாரவிர்த்திஞானம் 
b = akaṇṭākāravirttiñāṉam 
c = பேரறிவு. 
a = அகண்டி 
b = akaṇṭi 
c = ஒருவாச்சியம். 
a = அகண்டிதமூர்த்தி 
b = akaṇṭitamūrtti 
c = கண்டிக்கப்படாதவடிவுடையோன். 
a = அகண்டித பூர்த்தி 
b = akaṇṭit பூர்த்தி 
c = கப்படிக்கப்படாதவடிவுடையோன். 
a = அகண்டிதன் 
b = akaṇṭitaṉ 
c = எங்கும் நிறைந்தவன். 
a = அகண்டிதாகாரம் 
b = akaṇṭitākāram 
c = கண்டிக்கப்படாதவுருவம். 
a = அகதிகம் 
b = akatikam 
c = உரைக்கப்படாதது. 
a = அகதேசி 
b = akatēci 
c = உள்ளூரவன். 
a = அகத்தடியாள் 
b = akattaṭiyāḷ 
c = மனையாள். 
a = அகத்தியா 
b = akattiyā 
c = ஆழம், எட்டாமை, கடல். 
a = அகத்தியான் 
b = akattiyāṉ 
c = அகத்தியமுனிவன். 
a = அகத்தை 
b = akattai 
c = தாய். 
a = அகநகர் 
b = akanakar 
c = நகருள். 
a = அகநகை 
b = akanakai 
c = இகழ்ச்சிநகை. 
a = அகநகைத்தல் 
b = akanakaittal 
c = இகழ்ச்சி நகைசெய்தல். 
+0

非常感謝。我做了一個小小的破解,以便我可以在一行中得到輸出,這些輸出還可以用於處理數據。 '用於,B,C中的字符串: 打印>> F,(U 「{}」 的格式(A).encode( 'UTF8')), \t打印>> F,(U「{ }「。格式(b).encode('utf8')), print >> f,(u」{}「。format(c).encode('utf8')) –