利用Python爬取彩票信息

在爬取一些简单的(没有反爬机制的)静态网页时,一般采取的策略是:选中目标(所谓的url链接),观察结构(链接结构,网页结构),构思动手(选用什么HTML下载器,解析器等)。在爬虫过程中,都会涉及到三种利器:

HTML下载器:下载HTML网页

HTML解析器:解析出有效数据
数据存储器:将有效数据通过文件或者数据库的形式存储起来

今天,我们将利用requests库和BeautifulSoup模块来抓取中彩网页福彩3D相关的信息,并将其保存到Excel表格中。

在开始前,先分析看看目标网页的结构:

这里写图片描述

这里写图片描述

可以发现,目标网页的URL http://kaijiang.zhcw.com/zhcw/html/3d/list_2.html,每次变化一处:list_x后面的数字,其代表第几页。
这里写图片描述

然后,观察其网页结构,也很简单,可以看到一期的彩票信息对应的源代码是一个tr节点,我们可以用BeautifulSoup库来提取这里面的一些信息。
这里写图片描述

整体思路是:若要获取福彩3D创办14年以来所有的信息(一共246页),只需要分开请求246次,这样获取不同的页面之后,再利用BeautifulSoup库提取到相关信息,利用xlrd库将数据写入Excel中,就可以获取到福彩3D所有的信息,结果如下图:

(一共将近5000条数据)

详情代码如下:

import requests

from bs4 import BeautifulSoup

import xlwt

import time

获取第一页的内容

def get_one_page(url):

headers = {

    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'

}

response = requests.get(url,headers=headers)

if response.status_code == 200:

    return response.text

return None

解析第一页内容,数据结构化

def parse_one_page(html):

soup = BeautifulSoup(html,'lxml')

i = 0

for item in soup.select('tr')[2:-1]:



    yield{

        'time':item.select('td')[i].text,

        'issue':item.select('td')[i+1].text,

        'digits':item.select('td em')[0].text,

        'ten_digits':item.select('td em')[1].text,

        'hundred_digits':item.select('td em')[2].text,

        'single_selection':item.select('td')[i+3].text,

        'group_selection_3':item.select('td')[i+4].text,

        'group_selection_6':item.select('td')[i+5].text,

        'sales':item.select('td')[i+6].text,

        'return_rates':item.select('td')[i+7].text

    }

将数据写入Excel表格中

def write_to_excel():

f = xlwt.Workbook()                             

sheet1 = f.add_sheet('3D',cell_overwrite_ok=True)

row0 = ["开奖日期","期号","个位数","十位数","百位数","单数","组选3","组选6","销售额","返奖比例"]

#写入第一行

for j in range(0,len(row0)):

    sheet1.write(0,j,row0[j])



#依次爬取每一页内容的每一期信息,并将其依次写入Excel

i=0

for k in range(1,247):

    url = 'http://kaijiang.zhcw.com/zhcw/html/3d/list_%s.html' %(str(k))

    html = get_one_page(url)

    print('正在保存第%d页。'%k)

    #写入每一期的信息

    for item in parse_one_page(html):

        sheet1.write(i+1,0,item['time'])

        sheet1.write(i+1,1,item['issue'])

        sheet1.write(i+1,2,item['digits'])

        sheet1.write(i+1,3,item['ten_digits'])

        sheet1.write(i+1,4,item['hundred_digits'])

        sheet1.write(i+1,5,item['single_selection'])

        sheet1.write(i+1,6,item['group_selection_3'])

        sheet1.write(i+1,7,item['group_selection_6'])

        sheet1.write(i+1,8,item['sales'])

        sheet1.write(i+1,9,item['return_rates'])

        i+=1



f.save('3D.xls')

def main():

write_to_excel()

if name == ‘main‘:

main()
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值