Python|爬取彩票数据

pyhton|爬取彩票数据

背景:作者之前看到过不少朋友介绍利用python环境来爬取彩票数据的文章,方法大致都很类似,今天我也讲一下关于传统方法解析网页获得数据,同时给大家介绍一种可能被大家忽略的方法,对于网页结构化的表的数据可以获得比较高的数据获取效率。

环境:Python3.7/MongoDB

目标爬取页面:http://kaijiang.zhcw.com/zhcw/html/3d/list.html

简要说明一下爬虫的步骤:

1.选取目标网页

2.观察结构(网页结构、数据结构)

3.选用解析工具(虽然有很多朋友喜欢使用Beautyfulsoup,但是在下还是建议使用xpath,因为效率比较高一点)

4.数据的持久化(俗话说光爬数据不储存就是在耍流氓.需要考虑用什么方式储存从页面上获取的信息,Excel、MySql还是MongoDB,本例将使用MongoDB做为储存工具) 在正式开始工作之前我们来看看我们需要爬取的页面是什么样子 !


方法一:

方法一我们将直接通过常规方法对页面进行解析获取数据。下面我们通过翻页来查看网页地址都发生了些什么变化:

page1:http://kaijiang.zhcw.com/zhcw/html/3d/list_1.html

page2:http://kaijiang.zhcw.com/zhcw/html/3d/list_2.html

page3:http://kaijiang.zhcw.com/zhcw/html/3d/list_3.html

通过上面的观察,我们可以发现在我们翻页获取新的网页信息的时候,只有list_x这个地方发生了变化,那么我们的工作就变得简单了,我们只需要替换到list_x中x的值就可以获取到新的一页的数据了。那么我们的思路就是我们只需要解析一个网页的数据并获取,最后做个轮询,那么我们就可以获取整个网站的彩票数据了,想想就有点小激动。

那么接下来我们来看一看我们需要的数据都是放在什么样的地方,我们怎么样才能提取出来,现在观察网页结构,仔细一看也是相当的简单。我可以看到每一期的彩票信息都是放在一个**tr**标签对中,发现这个信息那么接下来代码工作就可以开始了。

def pare(page):

    url = http://kaijiang.zhcw.com/zhcw/html/3d/list_{}.html.format(page)
    r = request.get(url,timeout=5)

    selector = etree.HTML(r.text)
    for td in selector.xpath('//tr')[2:-1]:
       yield {'开奖日期': td.xpath('./td[position()=1]/text()')[0],
                  '期号': td.xpath('./td[position()=2]/text()')[0],
                  '百': td.xpath('./td[position()=3]/em/text()')[0],
                  '十': td.xpath('./td[position()=3]/em/text()')[1],
                  '个': td.xpath('./td[position()=3]/em/text()')[2],
                  '单选': td.xpath('./td[position()=4]/text()')[0],
                  '组3': td.xpath('./td[position()=5]/text()')[0],
                  '组': td.xpath('./td[position()=6]/text()')[0],
                  '销售金额(元)': td.xpath('./td[position()=7]/strong/text()')[0]
                  }

简单解释一下上面的代码,上面我们使用到的解析网页的工具是xpath,先不说解析的效率,语法个人觉得比Beautyfulsoup好一些,当然这因人而异,也有不少人觉soup好用。既然我们之前分析得出我们需要的信息在_tr_的每个标签中,我们先获取到每个网页中的所有_tr_标签,做个轮询我们就可以获取到每个标签对应的信息了。

下面可以写一个存数据库的函数了:

def save_to_mongo(db_name, data, key_words):
    '''
    :db_name:数据表名称    :data:由parse传入的可迭代的数据    :key_words:在存入数据库时用到的关键字    '''
   for d in data:
       key_word = {}
       if isinstance(key_words, list):
           key_word = {x: d[x] for x in key_words}
       elif isinstance(key_words, str):
           key_word = {key_words: d[key_words]}
       [print(x) for x in data if data_base[db_name].update_one(key_word, {'$set': x}, True)]

万事具备,先可以写一个main函数了,直接把所有的数据存入mongodb数据库了。

def main(num):
    '''
    :num:我们需要存入数据库的最近num页的数据    '''
    for n in range(1,int(num)+1):
        p = parse(page=n)
        save_to_mongo(db_name='自己取',data=p,key_words=['期号'])

打完收工,是不是相当简单!!!

方法二:

这个是一个我感觉被大家忽略了的方法。遇到类似这样的网页表单,可能比上面方法仔细去分析网页结构,查找数据在网页中存放的位置和特点来的更简单一点,那么这个方法就是什么呢? 千呼万唤始出来,这个方法就是pandas中的read_html方法了,是不是很容易被大家忽略掉了,接下来就为大家介绍这种方法。

import pandas as pd

def read(page):
    ''''''
    url = http://kaijiang.zhcw.com/zhcw/html/3d/list_{}.html.format(page)
    r = request.get(url,timeout=5)
    df = pd.read_html(r.text)
    keys = ['开奖日期','期号','中奖号码','单选','组选3','组选6','销售额(元)','返奖比例']
    for d in df[0][2:-1].to_dict(orient='records'):
        yield dict(zip(keys,[x for x in d.valus()][:-1]))

我们先来查看一下返回打印出来的结果:

这样的结果就是我想要的结果了,其实代码中df这部就可以获取到一个dataframe数据表单,我把它转换成了一个个的字典是为了往MongoDB数据库存取方便,如果你没有这样需要,直接到**pd.read_html(r.text)**就可以了。重复上面的main函数就可以直接存数据库,这样的操作是不是比上面的解析网页结构要简单了不少,以后遇到类似这样的网页表单结构,也可以采取类似的骚操作,就比大家熟悉的方法效率高一些。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值