2017-05-26 6 views
0

Wenn ich die Verknüpfung aus dem href-Attribut in Anker-Tag und der Zeichenfolge "Horizontal Zero Dawn" kratzen möchte.Scraping von Tags ohne Klasse mit beautifulSoup

Da das Anker-Tag keine eigene Klasse hat und es im Quellcode viele weitere Anker-Tags gibt.

Was kann ich mit BeautifulSoup tun, um die Daten zu scrapen, die ich brauche?

<div class="prodName"> 
<a href="/product.php?sku=123;name=Horizon Zero Dawn">Horizon Zero Dawn</a></div> 

Antwort

1

Es spielt keine Rolle, dass das Anker-Tag keine eigene Klasse hat. Durch das Auffinden der Eltern div, und dann einen Anker mit der entsprechenden href Eigenschaft und Text zu finden, können wir die beiden Werte erforderlich extrahieren:

from bs4 import BeautifulSoup 

page = '<div class="prodName"><a href="/product.php?sku=123;name=Horizon Zero Dawn">Horizon Zero Dawn</a></div>' 

soup = BeautifulSoup(page) 

div = soup.find('div', {'class': 'prodName'}) 
a = div.find('a', {'href': True}, text='Horizon Zero Dawn') 

print a['href'] 
print a.get_text() 

Diese Drucke:

/product.php?sku=123;name=Horizon Zero Dawn 
Horizon Zero Dawn 

EDIT:

Aktualisierung nach Kommentaren. Wenn Sie mehrere div Elemente auf der Seite haben, müssen Sie über sie Schleife und finden Sie die alle a Elemente, die in jedem existieren, etwa so:

import requests 
from bs4 import BeautifulSoup 

url ='https://in.webuy.com/product.php?scid=1' 
source_code = requests.get(url) 
plain_text = source_code.text 
soup = BeautifulSoup(plain_text,'html.parser') 
for div in soup.findAll('div',{'class':'prodName'}): 
    a = div.findAll('a') 
    for link in a: 
     href = link.get('href') 
     print(href) 
+0

@ V-Zard die Antwort aktualisiert – asongtoruin

Verwandte Themen