使用Python对双色球号码进行爬取

使用Python福彩官网对双色球进行爬取


很久之前写的一个小爬虫,代码其实有点冗杂,看官姥爷们如果有什么可以指点的地方,尽量拍,谢谢~

一点一点加油吧

目标是对所有双色球的号码进行爬取
在工作开始前我们需要先去网站蹲点
这个是页面:http://www.cwl.gov.cn/kjxx/ssq/hmhz/
页面分析工具:Firebug

首先进行页面的分析
点击一下第二页,链接变成了这样
http://www.cwl.gov.cn/kjxx/ssq/hmhz/index_1.shtml
再回到第一页,链接变成了这样
http://www.cwl.gov.cn/kjxx/ssq/hmhz/index.shtml
再去第三页,变成了这样
http://www.cwl.gov.cn/kjxx/ssq/hmhz/index_3.shtml

观察一下除了第一页之外其他页面的索引可以用index_+num来实现
得出代码:

def get_link(pages = 10):   #定义页面的生成器
    for i in xrange(pages):
        url = 'http://www.cwl.gov.cn/kjxx/ssq/hmhz/'
        if i == 0:
            url = url + 'index.shtml'
        else:
            url = url + 'index_' + str(i) + '.shtml'
        yield url

取出页面:

for url in get_link(page):
    ul = url

测试效果:(打印默认状况)

接下来使用firebug对页面进行分析:
审查元素找到所需爬取信息

对元素信息进行定位:
这里使用的是re对页面元素进行定位:

cmpdate = re.compile('(\d+?)') #日期
cmpblue = re.compile('(\d\d)')  #蓝球
cmpred = re.compile('(\d\d)')  #红球

后来看一下这样的写法比较基础虽然可以提取数据但是后处理似乎比较麻烦
整合一下

def getlottery(pages = 10):
    hd = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}
    date = []
    redball = []
    blueball = []
    cmpdate = re.compile('(\d+?)')
    cmpblue = re.compile('(\d\d)')
    cmpred = re.compile('(\d\d)')
    for url in get_link(pages):
        try:
            html = requests.get(url, headers = hd)
            html.raise_for_status()
            html.encoding = html.apparent_encoding
            res = html.text
        except:
            pass
        D = re.findall(cmpdate, res)
        B = re.findall(cmpblue, res)
        R = re.findall(cmpred, res)
        date.append(D)
        blueball.append(B)
        redball.append(R)
        return date, redball, blueball

测试运行:

爬取第一页的信息

对比一下页面的信息
使用Python对双色球号码进行爬取_第1张图片
算是成功了

不过看着第二个杂乱的列表,还是想说,后处理真的好麻烦QAQ

后续工作,可能还是需要想一下怎么样去写一个好的正则表达式才能让输出列表的可读性更强吧

补:(后处理)qwq:

def washdata(date, redball, blueball):
    tmp = []
    D = []
    B = []
    R = []
    for i in xrange(len(date)):
        for j in xrange(len(date[i])):
            D.append(date[i][j])
            B.append(blueball[i][j])
        for j in xrange(len(redball[i])):
            tmp.append(redball[i][j])
    m = 0
    while m != len(tmp):
        R.append(tmp[m:m+6])
        m += 6
    return D, R, B

def writefile(date, redball, blueball):
    with open('Lottery.csv', 'wb') as csvFile:
        writer = csv.writer(csvFile)
        fileheader = ['Date', 'RedBall#0', 'RedBall#1', 'RedBall#2', 'RedBall#3', \
                        'RedBall#4', 'RedBall#5','BlueBall']
        writer.writerow(fileheader)
        for i in xrange(len(date)):
            writer.writerow([date[i], redball[i][0], redball[i][1], \
             redball[i][2], redball[i][3], redball[i][4], redball[i][5], \
             blueball[i]])

处理效果:

起码能看了qwq

总结一下:
那个时候会xpath就好了 哈哈哈哈哈哈哈

你可能感兴趣的:(python爬虫)