2016-10-23 4 views
0

Ich bin gerade erst mit dem Web Scraping und ich versuche, bestimmte Links von einer Webseite zu ziehen. Ich habe erfolgreich eine Liste der Klassen <a> gemacht (nicht sicher, was diese Dinge tatsächlich genannt werden), die die hrefs für die Verbindungen enthalten, aber mein Problem ist, dass sie auch anderes Geräusch enthalten, das ich nicht will. Wie kann ich nur den href-Teil davon isolieren? Hier ist der Code:Wie ziehe ich href aus <a> in Python

data2015 = requests.get('https://www.tabroom.com/index/index.mhtml?country=&year=2015&month=') 
data2015 = BeautifulSoup(data2015.content, 'lxml') 
data2015 = data2015.find_all('tr') 
for tr in range(len(data2015)): 
    data2015[tr] = data2015[tr].find_all('td') 

relevantData = [0,2] 
for tr in range(len(data2015)): 
    try: 
     data2015[tr] = [data2015[tr][i] for i in relevantData] 
    except: 
     pass 
    for td in range(len(data2015[tr])): 
     data2015[tr][td] = [data2015[tr][td].get_text().strip(), data2015[tr][td].find_all('a')] 

Um zu klären, data2015 ist jetzt eine Liste von Listen, die zwei Elemente, von denen die zweite ist (auch eine Liste von zwei Elementen) zweite Element ist die <a> Sache auf den Link enthält, sondern auch andere Sachen, die ich nicht will. Das Element sieht wie folgt aus:

[<a class="white smallish nearfull" href="tourn/index.mhtml?tourn_id=4445">\n\t\t\t\t\t\t\tGranite District Novice Imp Spar and Congress\n\t\t\t\t\t\t</a>] 

Wie kann ich das Reinigen wieder so, dass ich einfach auf den Link in einer Art und Weise zu bekommen, die ich dann, dass mit BSoup öffnen kann?

Antwort

0

Vielleicht etwas wie dieses, vorausgesetzt, Sie versuchen nur, den Text/Link aus jeder Zeile in der Tabelle in eine eigene Zeile innerhalb einer Liste zu ziehen, die Ihr Dataset ist.

Dies wird alle Links in der Zeile finden und den Text/href in ein Zwei-Tupel innerhalb der Liste für jede Zeile setzen. Also würde Ihr Dataset für jede Zeile eine Liste enthalten, die Elemente von Zwei-Tupeln für jeden Anker in dieser Zeile mit dem Text/href in jedem Tupel enthält.

from bs4 import BeautifulSoup as BS 
import requests 

response = requests.get('https://www.tabroom.com/index/index.mhtml?country=&year=2015&month=') 
soup = BS(response.content, "html.parser") 
trs = soup.find('table', {'id': 'tournlist'}).find_all('tr') 
dataset = [ 
    [(y.text.strip(), y['href']) for y in x.find_all("a")] for x in trs 
] 
import pprint 
pprint.pprint(dataset) 
Verwandte Themen