1. 程式人生 > >Python爬取足球網站賽況

Python爬取足球網站賽況

前言: 本次爬取資料本意為了作為學習決策樹,但發現構造特徵時因不瞭解足球賽制,難以構造出較好的特徵。如果有小夥伴也對這個感興趣的話就和我交流交流吧~~

程式碼:

'''
#get_tata.py
獲取uhchina.com的14-15西甲賽況(未作清洗)
關鍵是觀察爬取資料的情況
'''

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
BASE_URL = 'http://www.uhchina.com/2014-2015xijia/{n_lun}lun.htm'
n_lun_limit = 38

title_name = ['Turn','Time','Home_team','Score','Visitor_team','讓球全','讓球半','大小全','大小半','半場','誰會贏']
#獲取每一個url的比賽資料
def get_content(url):
html = urlopen(url).read()
bsObj = BeautifulSoup(html,'lxml')
records = [dd for dd in bsObj.select('.maintable td')]
text_record =[]
matchs = []
for
record in records:
#print(record)
#print(record.get_text())
text_record.append(record.get_text())
del text_record[:13]
for i in range(0,int(len(text_record)/11)):
train_records = text_record[i * 11:(i + 1) * 11]
matchs.append(train_records)
return matchs
#返回url

def get_url(n_lun):
url = BASE_URL.format(n_lun = n_lun)
return url
#最後獲取資料儲存為scv格式
def final_get():
file = open('D:/Python/PythonProject/football_mining/matches_data.csv','w')
final_data = []
for n_lun in range(1,n_lun_limit + 1):
my_matches = get_content(get_url(n_lun))
#print(my_matches)
for my_match in my_matches:
final_data.append(my_match)
df_final_data = pd.DataFrame(columns = title_name,data = final_data)
df_final_data.to_csv(file)

分析:
本次採集所用的包

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd

這裡是我根據資料具體情況新增的,用來規範。小夥伴可以具體自己的情況。

del text_record[:13]
for i in range(0,int(len(text_record)/11)):
train_records
= text_record[i * 11:(i + 1) * 11]

這裡提供url連結,同樣,小夥伴可以自己觀察自己網頁的特徵,一般有Base部分(即不會改變的),和可變部分。例如本例的比賽輪次會在url連結體現。

def get_url(n_lun):
url = BASE_URL.format(n_lun = n_lun)
return url

最後獲得每個連結的賽況後將其轉化為csv檔案

最後: 希望有志同道合的小夥伴一起做一下有趣的東西
———關注我的公眾號,一起學資料探勘————
這裡寫圖片描述