2016-09-02 3 views
0
import requests 
from bs4 import BeautifulSoup 

url = "http://bet.hkjc.com/football/index.aspx?lang=en" 
r = requests.get(url) 

soup = BeautifulSoup(r.content, "html.parser") 

div = soup.find("div", {"class": "footballmaincontent"}) 
tables = div.find_all("table") 
my_table = tables[2] 

for row in my_table.find_all('tr'): 
    cols = row.find_all('td') 

    odds_list = [] 
    if len(cols) >= 10: 
     match_no = (cols[0].text.strip()) 
     teams = (cols[2].text.strip()) 
     match_time = (cols[4].text.strip()) 
     home_odds = (cols[7].text.strip()) 
     away_odds = (cols[8].text.strip()) 
     draw_odds = (cols[9].text.strip()) 

     odds_row = (match_no,teams,match_time,home_odds,away_odds,draw_odds) 
     odds_list.append(odds_row) 

# Write to csv file 
import csv 
with open("odds_file.csv", "wb") as file: 
    writer = csv.writer(file) 
    for row in odds_list: 
     writer.writerow(row) 

Я попытался экспортировать столбцы в файл csv, добавив их в «odds_list» внутри цикла for. Но оказалось, что ничего не написано в «odds_file».Webscrapping with bs4

Я знаю, Theres что-то неправильно с

odds_row = (match_no,teams,match_time,home_odds,away_odds,draw_odds) 

Но как я могу добавить в список, который я сделал в .csv файл?

+0

Используя детей [2] Вы выбираете 3-й таблицу в DOM. Это действительно то, что вы хотите, данные в третьей таблице в DOM? –

ответ

-1

my_table Вы так использовать find и find_all с my_table, чтобы получить <tr> и позже <td>, а затем вы можете получить text от <td>.


EDIT:

import requests 
from bs4 import BeautifulSoup 

url = "http://bet.hkjc.com/football/index.aspx?lang=en" 
r = requests.get(url) 

soup = BeautifulSoup(r.content, "html.parser") 

div = soup.find("div", {"class": "footballmaincontent"}) 
tables = div.find_all("table") 
my_table = tables[2] 

for row in my_table.find_all('tr'): 
    cols = row.find_all('td') 
    if len(cols) >= 10: 
     print(cols[0].text.strip(),'|',end='') 
     print(cols[2].text.strip(),'|',end='') 
     print(cols[4].text.strip(),'|',end='') 
     print(cols[7].text.strip(),'|',end='') 
     print(cols[8].text.strip(),'|',end='') 
     print(cols[9].text.strip(),'|',end='') 
     print() 
     print('-'*40) 

результат

Match No. |Teams(Home vs Away) |Expected StopSelling Time |Home/Away/Draw | | | 
---------------------------------------- 
FRI 9 |Romania U21 vs Luxembourg U21 |03/09 01:30 |Accept In Play Betting Only | | | 
---------------------------------------- 
FRI 13 |St. Vincent and Grenadines vs USA |03/09 03:30 |35.00 |13.00 |1.02 | 
---------------------------------------- 
FRI 14 |Honduras vs Canada |03/09 05:06 |1.45 |3.55 |6.50 | 
---------------------------------------- 
FRI 15 |Trinidad and Tobago vs Guatemala |03/09 07:00 |1.67 |3.20 |4.70 | 
----------------------------------------