python, 爬虫爬取彩票网数据,pandas分析数据并实现可视化饼图
import lxml import requests from lxml import etree url = 'https://datachart.500.com/ssq/history/newinc/history.php?limit=5000&sort=0' resp = requests.get(url) hm = etree.HTML(resp.text) # 在返回页面内容的任意位置查找id=tdata的tbody标签,并取其下所有的tr标签内容,赋给trs列表 trs = hm.xpath("//tbody[@id='tdata']/tr") f = open('data.csv', 'w') # 将攫取的数据存到data.csv文件 for tr in trs: data_lst = tr.xpath('td/text()') # 准备写入文件,以备后用,csv文件是pandas能直接读取的,最有效率 #去掉列表中的逗号和\xa0,使用的是列表推导式完成这个任务 data_lst = [x.replace(',','').replace('\xa0','') for x in data_lst] f.write(','.join(data_lst) + '\n') f.close()
用xpath获取数据,并存成data.csv,便于以后用pandas读取分析。
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('data.csv', header = None) # 提取红球开奖号码,在1-6列上 red_ball = df.loc[:,1:6] # 红球开奖号码在第1-6列上,提取所有行 # 统计红球各个开奖号码出现的次数 red_count = pd.value_counts(red_ball.values.flatten()) # 提取蓝球出现的次数 blue_ball = df.loc[:, 7] # 统计蓝球各个开奖号码出现的次数 blue_count = pd.value_counts(blue_ball.values.flatten()) # 可视化 plt.pie(red_count, labels = red_count.index, radius = 1, wedgeprops = {'width':0.3}) plt.pie(blue_count, labels = blue_count.index, radius = 0.5, wedgeprops = {'width': 0.3}) plt.show()