Frage

In Antwort auf eine vorherige Frage , einige Leute vorgeschlagen, dass ich verwenden BeautifulSoup für mein Projekt. Ich habe mit ihrer Dokumentation zu kämpfen, und ich kann es einfach nicht analysieren. Kann mir jemand auf den Abschnitt zeigen, wo ich in der Lage sein sollte, diesen Ausdruck auf einem BeautifulSoup Ausdruck zu übersetzen?

hxs.select('//td[@class="altRow"][2]/a/@href').re('/.a\w+')

Der obige Ausdruck ist von Scrapy . Ich versuche, den regex re('\.a\w+') anzuwenden, um td class altRow die Links von dort zu erhalten.

Ich würde auch Verweise auf andere Anleitungen oder Dokumentation zu schätzen wissen. Ich konnte keine finden.

Danke für Ihre Hilfe.

Bearbeiten: Ich betrachte diese :

>>> soup.head.title
<title>White & Case LLP - Lawyers</title>
>>> soup.find(href=re.compile("/cabel"))
>>> soup.find(href=re.compile("/diversity"))
<a href="/diversity/committee">Committee</a> 

Doch wenn Sie auf der Seite Quelle "/cabel" sehen gibt es:

 <td class="altRow" valign="middle" width="34%"> 
 <a href='/cabel'>Abel, Christian</a> 

Aus irgendeinem Grund sind die Suchergebnisse BeautifulSoup nicht sichtbar, aber sie sind sichtbar zu XPath weil hxs.select('//td[@class="altRow"][2]/a/@href').re('/.a\w+') Fänge „/ Kabel“

Bearbeiten: cobbal: Es ist immer noch nicht funktioniert. Aber wenn ich suche diese:

>>>soup.findAll(href=re.compile(r'/.a\w+'))
[<link href="/FCWSite/Include/styles/main.css" rel="stylesheet" type="text/css" />, <link rel="shortcut icon" type="image/ico" href="/FCWSite/Include/main_favicon.ico" />, <a href="/careers/northamerica">North America</a>, <a href="/careers/middleeastafrica">Middle East Africa</a>, <a href="/careers/europe">Europe</a>, <a href="/careers/latinamerica">Latin America</a>, <a href="/careers/asia">Asia</a>, <a href="/diversity/manager">Diversity Director</a>]
>>>

es gibt alle Links mit zweiten Zeichen „a“, aber nicht den Anwalt Namen. Also aus irgendeinem Grunde diese Verbindungen (wie zum Beispiel „/ Kabel“) sind BeautifulSoup nicht sichtbar. Ich verstehe nicht, warum.

War es hilfreich?

Lösung

Ich weiß BeautifulSoup die kanonische HTML-Parsing-Modul ist, aber manchmal möchte man einfach einige Teil von einigen HTML kratzen, und pyparsing hat einige nützliche Methoden, dies zu tun. Mit diesem Code:

from pyparsing import makeHTMLTags, withAttribute, SkipTo
import urllib

# get the HTML from your URL
url = "http://www.whitecase.com/Attorneys/List.aspx?LastName=&FirstName="
page = urllib.urlopen(url)
html = page.read()
page.close()

# define opening and closing tag expressions for <td> and <a> tags
# (makeHTMLTags also comprehends tag variations, including attributes, 
# upper/lower case, etc.)
tdStart,tdEnd = makeHTMLTags("td")
aStart,aEnd = makeHTMLTags("a")

# only interested in tdStarts if they have "class=altRow" attribute
tdStart.setParseAction(withAttribute(("class","altRow")))

# compose total matching pattern (add trailing tdStart to filter out 
# extraneous <td> matches)
patt = tdStart + aStart("a") + SkipTo(aEnd)("text") + aEnd + tdEnd + tdStart

# scan input HTML source for matching refs, and print out the text and 
# href values
for ref,s,e in patt.scanString(html):
    print ref.text, ref.a.href

I extrahierte 914 Referenzen Ihrer Seite, von Abel bis Zupikova.

Abel, Christian /cabel
Acevedo, Linda Jeannine /jacevedo
Acuña, Jennifer /jacuna
Adeyemi, Ike /igbadegesin
Adler, Avraham /aadler
...
Zhu, Jie /jzhu
Zídek, Aleš /azidek
Ziółek, Agnieszka /aziolek
Zitter, Adam /azitter
Zupikova, Jana /jzupikova

Andere Tipps

eine Option ist lxml zu verwenden (Ich bin nicht vertraut mit beautifulsoup, so kann ich nicht sagen, wie damit zu tun), es defaultly unterstützt XPath

Bearbeiten
versuchen (ungetestet) getestet:

soup.findAll('td', 'altRow')[1].findAll('a', href=re.compile(r'/.a\w+'), recursive=False)

Ich benutzte Dokumente unter http://www.crummy.com/software/BeautifulSoup /documentation.html

Suppe sollte ein BeautifulSoup Objekt sein

import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(html_string)

Ich antwortete nur diese auf der schönen Suppe Mailing-Liste als Antwort auf Zeynel E-Mail auf die Liste. Grundsätzlich gibt es einen Fehler in der Web-Seite, die total schöne Suppe 3.1 während Parsing tötet, sondern nur verstümmelte durch schöne Suppe 3.0.

Der Faden an der Google Groups-Archiv .

Es scheint, dass Sie verwenden BeautifulSoup 3.1

Ich schlage vor, zurückkehrt 3.0.7 BeautifulSoup (wegen der dieses Problem )

Ich habe gerade mit 3.0.7 getestet und bekam die Ergebnisse, die Sie erwarten:

>>> soup.findAll(href=re.compile(r'/cabel'))
[<a href="/cabel">Abel, Christian</a>]

Test mit BeautifulSoup 3.1 erhält die Ergebnisse, die Sie sehen. Es gibt wahrscheinlich einen fehlerhaften Tag in dem HTML-Code, aber ich habe nicht gesehen, was es in einem kurzen Blick war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top