2017-01-01 6 views
-1

Ich versuche Wie Sie einen bestimmten Link zu diesem HTML-Codehref mit Schöne Suppe

<a class="pageNum taLnk" data-offset="10" data-page-number="1" 
href="www.blahblahblah.com/bb32123">Page 1 </a> 
<a class="pageNum taLnk" data-offset="20" data-page-number="2" 
href="www.blahblahblah.com/bb45135">Page 2 </a> 

Wie Sie den Link (href) sehen zu extrahieren, unorganisiert sind, daher gibt es kein Muster für mich zu verwenden, die bedeutet, dass ich die href manuell mit BeautifulSoup extrahieren muss.

Ich möchte speziell erhalten, dass href.

Diese können den Code ich jetzt haben.

from bs4 import BeautifulSoup 
import urllib 

url = 'https://www.tripadvisor.com/ShowUserReviews-g293917-d539542-r447460956-Duangtawan_Hotel_Chiang_Mai-Chiang_Mai.html#REVIEWS' 
page = urllib.request.urlopen(url) 
soup = BeautifulSoup(page, 'html.parser') 
for link in soup.find_all('a', attrs = {'class' : 'pageNum taLnk'}): 
    print (link) 

Wie Sie sehen können, bin ich zu versuchen, steckte die href Informationen speziell für die Seite zu erhalten 2. Gibt es trotzdem für den Zugriff mit den Extra-Informationen innerhalb der Tags wie data-page-number = "2" oder data-offset = "20".

Antwort

2
page_2 = soup.find('a', attrs = {'data-page-number' : '2'}) 

Dies wird nur erhalten Sie die Seite 2, wenn Sie unabhängig von der nächsten Seite erhalten möchten, was die aktuelle Seite ist, sollten Sie die nächste Seite URL finden:

next_page = soup.find('a', attrs = {'class' = 'nav next rndBtn ui_button primary taLnk'}) 

Some Attribute, wie die Daten- * Attribute in HTML 5, haben Namen, die wie die Namen von Keyword-Argumente nicht verwendet werden können:

data_soup = BeautifulSoup('<div data-foo="value">foo!</div>') 
data_soup.find_all(data-foo="value") 
# SyntaxError: keyword can't be an expression 

Sie können Verwenden Sie diese Attribute bei der Suche, indem sie in einem Wörterbuch und Leiten des Wörterbuch in find_all() als attrs Argument setzen:

data_soup.find_all(attrs={"data-foo": "value"}) 
# [<div data-foo="value">foo!</div>] 
+0

oh .. danke !, warum nicht ich denke an das! ! –

+0

@ Niche.P Ich aktualisiere den Code, und bitte akzeptieren Sie die Antwort. –

+0

yup, ich warte auf den Timer, 2 Minuten übrig. Vielen Dank –