Web scraping 从高度非结构化的网页中提取数据

Web scraping 从高度非结构化的网页中提取数据,web-scraping,beautifulsoup,Web Scraping,Beautifulsoup,我通常使用带有python的Beautiful soup从页面中提取数据。我遇到了一个奇怪的情况,在那里,他们以一种非常不受约束的方式输入 这是页面 在检查货源时,我发现它是这样储存的 1) <a href="/cgi-bin/app/kadirvelu_query.py?qs=அகங்காரவிர்த்தி&searchhws=yes"><hw>அகங்காரவிர்த்தி</hw></a> akangkāravirtti (<

我通常使用带有python的Beautiful soup从页面中提取数据。我遇到了一个奇怪的情况,在那里,他们以一种非常不受约束的方式输入

这是页面

在检查货源时,我发现它是这样储存的

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>

html很糟糕,运行它时会出现161个错误,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 = இகழ்ச்சி நகைசெய்தல்.

谢谢。我做了一个小的改动,这样我可以在一行中获得输出,进一步可以用于处理数据<字符串形式的a、b、c的编码:打印>>f,(u{}.format(a).encode('utf8')),打印>>f,(u{}.format(b).encode('utf8')),打印>>f,(u{}.format(c).encode('utf8'))
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 = இகழ்ச்சி நகைசெய்தல்.