平时喜欢看球赛,十几年的詹密,五一放假(表示五一十天假期)在家闲着没事爬爬本赛季NBA球员常规赛数据。虎扑还是比较友好,页面比较简单,使用requests库和正则表达式就可以完成爬取了,哈哈。
首先看看要爬取哪些数据
找到数据在哪些标签里面
查看一共收录了几页的球员数据
代码
#spider程序 import re import requests from requests.exceptions import RequestException from config import * import pymongo client = pymongo.MongoClient(MONGO_URL) db = client[MONGO_DB] #获取页面上html代码 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) #保存到MongoDB 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'运行结果
注:学生党,代码写的不够优美,希望与大家一块交流学习。