2017-01-18 6 views
0

я в настоящее время имеют следующие строки кодаЗачистка Таблица и печать различных данных

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) 

скребущий все имена лошадей для встреч в таблице с racingaustralia.com/horse

Это именно то, что я хочу но я также хочу получить дату встречи, место встречи и каждую гонку, перечислить имя лошади.

Это пример того, что я хотел:

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

ли кто-то сможет помочь мне настроить код так, чтобы дата и место каждой расы встречаются в печати, а также количества гонки для каждая лошадь?

Я попытался сделать следующее, но мне было интересно, был ли более эффективный способ сделать это.

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) 

Заранее спасибо

+0

Я пишу код выше, чтобы вы могли понять, как это работает, вы не должны просить других людей писать код для вас. –

+2

Привет, вы, возможно, заметили, что я действительно адаптировал код, который вы написали для меня. Я также написал хороший код, прежде чем вы изменили то, что у меня было. Я просто прошу о помощи, если это слишком много, я удалю его – Kirsty

ответ

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) 

из:

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 

Там много ссылок, не содержит информацию, вам нужно, вы должны изменить регулярное выражение, чтобы фильтровать его, таким образом, ваш код может работать быстрее.

+0

Привет, этот результат печатает номер лошади, а не номер гонки. Я не очень хочу, чтобы номер лошади - просто номер гонки. – Kirsty