2017-01-18 2 views
0

Ich habe zur Zeit die folgenden CodezeilenScraping Table & Printing verschiedene Daten

import requests, re, bs4 
from urllib.parse import urljoin 
start_url = 'http://www.racingaustralia.horse/' 

def make_soup(url): 
    r = requests.get(url) 
    soup = bs4.BeautifulSoup(r.text,"lxml") 
    return soup 

def get_links(url): 
    soup = make_soup(url) 
    a_tags = soup.find_all('a', href=re.compile(r"^/FreeFields/")) 
    links = [urljoin(start_url,a['href']) for a in a_tags] 
return links 

def get_tds(link): 
    soup = make_soup(link) 
    tds = soup.find_all('td', class_="horse") 
    for td in tds: 
      print(td.text) 

if __name__ == '__main__': 
    links = get_links(start_url) 
    for link in links: 
     get_tds(link) 

, die alle Pferdenamen für Sitzungen innerhalb der Tabelle schabt von racingaustralia.com/horse

Das ist genau das, was ich will aber ich möchte auch das Datum des Treffens, den Ort des Treffens und für jedes Rennen den Namen des Pferdes abrufen.

Dies ist ein Beispiel dessen, was ich bin zu wollen:

Date of Race Meet 
Location of Race Meet 
Race Number 
Horse.... 
... 
... 
... 
Race Number 
Horse 
... 
... 
etc 

Würde mich jemand in der Lage sein zu helfen, den Code so einstellen, dass das Datum und den Ort jedes Rennens treffen sowie die Startnummer gedruckt wird jedes Pferd?

Ich habe Folgendes versucht, aber ich fragte mich, ob es einen effizienteren Weg dazu gab.

def get_tds(link): 
    soup = make_soup(link) 
    race_date = soup.find_all('span', class_="race-venue-date") 
    for span in race_date: 
     print(span.text) 

    tds = soup.find_all('td', class_="horse") 
    for td in tds: 
     print(td.text) 

def get_info(link): 
    item = soup.find_all('div', class_="top") 
    for div in item: 
     print(div.text) 

if __name__ == '__main__': 
    links = get_links(start_url) 
    for link in links: 
     get_info(link), get_tds(link) 

Vielen Dank im Voraus

+0

Ich schreibe den Code oben für Sie zu verstehen, wie es funktioniert, sollten Sie nicht andere Leute bitten, Code für Sie zu schreiben. –

+2

Hallo, Sie haben vielleicht bemerkt, dass ich tatsächlich den Code angepasst habe, den Sie für mich geschrieben haben. Ich habe auch ein gutes Stück Code geschrieben, bevor Sie das geändert haben, was ich hatte. Ich frage einfach um Hilfe, wenn das zu viel verlangt, werde ich es entfernen – Kirsty

Antwort

0
import requests, re, bs4 
from urllib.parse import urljoin 


def make_soup(url): 
    r = requests.get(url) 
    soup = bs4.BeautifulSoup(r.text,"lxml") 
    return soup 

def get_links(url): 
    soup = make_soup(url) 
    a_tags = soup.find_all('a', href=re.compile(r"^/FreeFields/")) 
    links = [urljoin(start_url,a['href']) for a in a_tags] 
    return links 

def get_info(link): 
    soup = make_soup(link) 
    tds = soup.find_all('td', class_="horse") 
    if tds: 
     top = soup.find(class_="top").h2 
     for s in top.stripped_strings: 
      print(s) 
     for index, td in enumerate(tds, 1): 
      print(index, td.text, sep='\n') 
    else: 
     print('not find') 

if __name__ == '__main__': 
    start_url = 'http://www.racingaustralia.horse/' 
    links = get_links(start_url) 
    for link in links: 
     get_info(link) 

aus:

Warwick Farm: Australian Turf Club 
Wednesday, 18 January 2017 
1 
GAUGUIN (NZ) 
2 
DAHOOIL (NZ) 
3 
METAMORPHIC 
4 
MY KIND 
5 
CONCISELY 
6 
ARAZONA 
7 
APOLLO 
8 
IGNITE THE LIGHT 
9 
KRUPSKAYA 

eine Menge URLs Es gibt die Informationen, die Sie brauchen nicht enthält, sollten Sie die Regex ändern Sie es heraus zu filtern, Auf diese Weise kann Ihr Code schneller ausgeführt werden.

+0

Hallo, dieses Ergebnis druckt die Nummer des Pferdes und nicht die Startnummer. Ich will nicht wirklich die Nummer des Pferdes - nur die Startnummer. – Kirsty