iceberg710815
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()

  

 

分类:

技术点:

相关文章: