|
平时喜欢看球赛,十几年的詹密,五一放假(表示五一十天假期)在家闲着没事爬爬本赛季NBA球员常规赛数据。虎扑还是比较友好,页面比较简单,使用requests库和正则表达式就可以完成爬取了,哈哈。
首先看看要爬取哪些数据


找到数据在哪些标签里面

查看一共收录了几页的球员数据

代码
import re
import requests
from requests.exceptions import RequestException
from config import *
import pymongo
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]
def get_one_page(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def get_data_param(html):
pattern = re.compile('<tr.*?bg_a">.*?width="46">(.*?)</td>.*?class="left">(.*?)</td>.*?'
'width="50">(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>'
'(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?width="50">'
'(.*?)</td>.*?width="70">(.*?)</td>', re.S)
items = re.findall(pattern,html)
list = []
for item in items:
list.append(item[0])
list.append(item[1])
list.append(item[2])
list.append(item[3])
list.append(item[4])
list.append(item[5])
list.append(item[6])
list.append(item[7])
list.append(item[8])
list.append(item[9])
list.append(item[10])
list.append(item[11])
return list
def parse_one_page(html,list):
pattern = re.compile('<tr>.*?width="46">(.*?)</td>.*?html">(.*?)'
'</a>.*?width="50">.*?">(.*?)</a>.*?bg_b">(.*?)</td>'
'.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>'
'.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>'
'.*?width="50">(.*?)</td>.*?width="70">(.*?)</td>.*?/tr>',re.S)
items = re.findall(pattern,html)
for item in items:
data = {
list[0]:item[0],
list[1]:item[1],
list[2]:item[2],
list[3]:item[3],
list[4]:item[4],
list[5]:item[5],
list[6]:item[6],
list[7]:item[7],
list[8]:item[8],
list[9]:item[9],
list[10]:item[10],
list[11]:item[11]
}
save_to_mongoDB(data)
def save_to_mongoDB(data):
try:
if db[MONGO_TABLE].insert(data):
print('存储到MongoDB成功',data)
except Exception:
print('存储到MongoDB失败',data)
def main():
for offset in range(1,7):
url = 'https://nba.hupu.com/stats/players/pts/'+str(offset)
html = get_one_page(url)
params = get_data_param(html)
items = parse_one_page(html,params)
if __name__ == '__main__':
main()
#MongoDB配置
MONGO_URL = 'localhost'
MONGO_DB = 'NBA'
MONGO_TABLE = 'data_statistics'

运行结果


注:学生党,代码写的不够优美,希望与大家一块交流学习。 |