做网站如何选择颜色,上海微信网站制作哪家专业,wordpress打开慢排查,网页小程序网页分析
首先打开中国福彩网#xff0c;点击双色球#xff0c;选择往期开奖栏目 进入栏目后#xff0c;选定往期的奖金数目作为我们想要爬取的目标内容
明确目标后#xff0c;开始寻找数据所在的位置 鼠标右击页面#xff0c;打开网页源代码#xff0c;在源代码中搜索…网页分析
首先打开中国福彩网点击双色球选择往期开奖栏目 进入栏目后选定往期的奖金数目作为我们想要爬取的目标内容
明确目标后开始寻找数据所在的位置 鼠标右击页面打开网页源代码在源代码中搜索是否存在奖金金额数目
搜索过后发现这个金额数据没有在网页的源代码中所以想到用抓包的方式来尝试获取这些金额数据 右击检查选择network选项卡按下ctrlr键刷新界面开始捕捉数据包 在过滤掉一些png、jpg的数据包之后我们锁定了一个以findDrawNotice开头的数据包打开观察数据包的内容发现这个正是我们想要抓取的数据包 现在已经找到了想要抓包的内容现在可以开始着手写代码了
数据提取
我们分析过网页之后选定了要抓取的数据包开始使用requests请求来获取数据
url http://www.cwl.gov.cn/cwl_admin/kjxx/findDrawNotice?namessqissueCount30
headers {User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36,Referer:http://www.cwl.gov.cn/kjxx/ssq/}
response requests.get(url,headersheaders).text
这个网页可能会有一个小的反爬措施于是我们就在headers中加入user-agent和referer两个头信息 我们使用print语句来打印一下response的内容
print之后会发现这个内容是以字符串的格式打印出来的如果我们想从中提取数据则必须将它转换成字典的格式
data_json json.loads(response) #将数据转换为json格式
将数据转换之后我们就可以使用键值对的方式来提取我们想要的数据了
datas data_json[result]
for data in datas:prizegrades data[prizegrades] #包含中奖金额的字典提取for item in prizegrades:print(item)typemoney item[typemoney] #中奖金额提取print(typemoney)
这里我们尝试着逐层提取彩票的奖金信息提取到最近的一层时将数据打印出来分析数据
可以看到前三个和我们想要提取的数据内容是一致的这些type后面的数字指的是奖金的等级就是说对应到的号码是多少就是几等奖 到此为止我们已经将需要获取的中奖金额提取出来了
转换数据
等我们看到这些数据的时候虽然看到的是数字形式但是他的数据类型确是字符形通过此前对pygal模块的了解我们知道这个模块只可以将整形的数字转换成图表格式。 所以我们需要做的就是将每一个数字提取出来并且转换成整形存入到列表中 由于我们想要提取的只是一等奖的奖金金额因为二、三等奖的金额远小于一等奖不适合在图表中观察所以这里我加上了一个if语句判断
money_list [] #创建空列表
for data in datas:prizegrades data[prizegrades]for item in prizegrades:type_num item[type]typemoney item[typemoney]if type_num 1: #判断奖金等级是否为1money_list.append(int(typemoney))
但是我在运行这段代码的时候会提示错误经过我的一番疯狂分析(百度求助),发现出错的原因是在提取奖金的时候会出现下划线和空字符串的干扰而int转换数据类型则只能装换纯数字组成的字符串所以转换的过程中会报错。但是这并不是一个大问题我们只需要写一个if语句来跳过非法字符串就可以解决了下面是正确的代码
money_list [] #创建空列表
for data in datas:prizegrades data[prizegrades]for item in prizegrades:typemoney item[typemoney]if type_num 1: #判断奖金等级是否为1if typemoney : #忽略空字符passelif typemoney _: #忽略下划线passelse: #将其他的可用数字放入列表money_list.append(int(typemoney))
print(money_list)
观察输出
将数据转换成图表
#设置图表样式为柱状图
view pygal.Bar()
#图表名
view.title 奖金金额
#将数据填入图表
view.add(money,money_list)
#在浏览器中显示图表
view.render_in_browser()
完整代码
import json
import pygalurl http://www.cwl.gov.cn/cwl_admin/kjxx/findDrawNotice?namessqissueCount30
headers {User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36,Referer:http://www.cwl.gov.cn/kjxx/ssq/}
response requests.get(url,headersheaders).text
data_json json.loads(response)
datas data_json[result]
money_list [] #创建空列表
for data in datas:prizegrades data[prizegrades]for item in prizegrades:type_num item[type]typemoney item[typemoney]if type_num 1: #判断奖金等级是否为1if typemoney : #忽略空字符passelif typemoney _: #忽略下划线passelse: #将其他的可用数字放入列表money_list.append(int(typemoney))#设置图表样式为柱状图
view pygal.Bar()
#图表名
view.title 奖金金额
#将数据填入图表
view.add(money,money_list)
#在浏览器中显示图表
view.render_in_browser()
实现结果