python爬取双色球数据更新及数据库使用

python爬取双色球数据更新及数据库使用 解析网站并获取数据 python # 彩票数据所在的url url = 'http://datachart

本文包含相关资料包-----> 点击直达获取<-------

python爬取双色球数据更新及数据库使用

  1. 解析网站并获取数据

python # 彩票数据所在的url url = 'http://datachart.500.com/ssq/' # 提取数据 response = requests.get(url, headers={"User-Agent": UserAgent().chrome}) # 通过xpath去解析 e = etree.HTML(response.text) date_times = e.xpath('//tbody[@id="tdata"]/tr/td[1]/text()') trs = e.xpath('//tbody[@id="tdata"]/tr[not(@class)]')

  1. 链接数据库

python # 链接数据库 client = pymysql.connect(host='localhost', port=3306, user='root', password='123456', charset='utf8', db='bangumi') cursor = client.cursor()

  1. 普通获取数据

python # 插入数据的sql sql = 'insert into doubleballs values(0,%s,%s,%s)' for data_time, tr in zip(date_times, trs): red_ball = '-'.join(tr.xpath('./td[@]/text()')) blue_ball = tr.xpath('./td[@]/text()')[0] print("第" + data_time + "红球是:" + red_ball + " 蓝球:" + blue_ball) cursor.execute(sql, [data_time, red_ball, blue_ball]) client.commit()

  1. 更新数据这部分从数据库中获取数据,然后反转顺序,index作为计数器,循环遍历假如有新数据要更新,那result返回值为0,index+1。

python # 查看数据是否存在 select_new_sql = "select * from doubleballs where date_time = %s" date_times.reverse() # 记录有多少条新数据 index = 0 for data_time in date_times: result = cursor.execute(select_new_sql, [data_time]) # 判断数据是否存在 if result == 1: break index+=1

  1. 数据顺序反转,按照网站上xpath写法获取第1个数据,即最新的数据放到数据库中。

python # 数据从新到旧排序 trs.reverse() for i in range(index): # 提取红球 red_ball = '-'.join(trs[i].xpath('./td[@]/text()')) # 提取蓝球 blue_ball = trs[i].xpath('./td[@]/text()')[0] print("第" + date_times[i] + "红球是:" + red_ball + " 蓝球:" + blue_ball) cursor.execute(sql, [date_times[i], red_ball, blue_ball]) client.commit()

  1. 完整代码

```python import requests from fake_useragent import UserAgent from lxml import html import pymysql

etree = html.etree # 彩票数据所在的url url = 'http://datachart.500.com/ssq/' # 提取数据 response = requests.get(url, headers={"User-Agent": UserAgent().chrome}) # 通过xpath去解析 e = etree.HTML(response.text) date_times = e.xpath('//tbody[@id="tdata"]/tr/td[1]/text()') trs = e.xpath('//tbody[@id="tdata"]/tr[not(@class)]') # 链接数据库 client = pymysql.connect(host='localhost', port=3306, user='root', password='123456', charset='utf8', db='bangumi') cursor = client.cursor() # 插入数据的sql sql = 'insert into doubleballs values(0,%s,%s,%s)' # 查看数据是否存在 select_new_sql = "select * from doubleballs where date_time = %s" date_times.reverse() # 记录有多少条新数据 index = 0 for data_time in date_times: reslut = cursor.execute(select_new_sql, [data_time]) # 判断数据是否存在 if reslut == 1: break index += 1 # 数据从新到旧排序 trs.reverse() for i in range(index): # 提取红球 red_ball = '-'.join(trs[i].xpath('./td[@]/text()')) # 提取蓝球 blue_ball = trs[i].xpath('./td[@]/text()')[0] print("第" + date_times[i] + "红球是:" + red_ball + " 蓝球:" + blue_ball) cursor.execute(sql, [date_times[i], red_ball, blue_ball]) client.commit() # for data_time, tr in zip(date_times, trs): # red_ball = '-'.join(tr.xpath('./td[@]/text()')) # blue_ball = tr.xpath('./td[@]/text()')[0] # print("第" + data_time + "红球是:" + red_ball + " 蓝球:" + blue_ball) # cursor.execute(sql, [data_time, red_ball, blue_ball]) # client.commit() cursor.close() client.close() ```

  1. 这样排序会让更新之后最新的在数据最后,但是一开始排序的时候不会出现问题,是从新到旧的排序。于是因为有点强迫症,最后还是改成从旧到新排序。只需要改动几行代码即可,反转数据在提取红球蓝球数据前,保证数据最新,判断时每次存在就让 index+1 ,之后加入 index = count - index 其中 count = data_time.__len__() 。接着将循环中的 i 变成 index-i-1 。最终代码如下,

```python import requests from fake_useragent import UserAgent from lxml import html import pymysql

etree = html.etree # 彩票数据所在的url url = 'http://datachart.500.com/ssq/' # 提取数据 response = requests.get(url, headers={"User-Agent": UserAgent().chrome}) # 通过xpath去解析 e = etree.HTML(response.text) date_times = e.xpath('//tbody[@id="tdata"]/tr/td[1]/text()') trs = e.xpath('//tbody[@id="tdata"]/tr[not(@class)]') count =date_times. len () # 链接数据库 client = pymysql.connect(host='localhost', port=3306, user='root', password='123456', charset='utf8', db='bangumi') cursor = client.cursor() # 插入数据的sql sql = 'insert into doubleballs values(0,%s,%s,%s)' # 查看数据是否存在 select_new_sql = "select * from doubleballs where date_time = %s" # date_times.reverse() # 记录有多少条新数据 index = 0 for data_time in date_times: reslut = cursor.execute(select_new_sql, [data_time]) # 判断数据是否存在 if reslut == 1: index += 1 index = count - index # 数据从新到旧排序 # trs.reverse() date_times.reverse() trs.reverse() for i in range(index): # 提取红球 red_ball = '-'.join(trs[index-i-1].xpath('./td[@]/text()')) # 提取蓝球 blue_ball = trs[index-i-1].xpath('./td[@]/text()')[0] print("第" + date_times[index-i-1] + "红球是:" + red_ball + " 蓝球:" + blue_ball) cursor.execute(sql, [date_times[index-i-1], red_ball, blue_ball]) client.commit() # for data_time, tr in zip(date_times, trs): # red_ball = '-'.join(tr.xpath('./td[@]/text()')) # blue_ball = tr.xpath('./td[@]/text()')[0] # print("第" + data_time + "红球是:" + red_ball + " 蓝球:" + blue_ball) # cursor.execute(sql, [data_time, red_ball, blue_ball]) # client.commit() cursor.close() client.close() ```

参考文献

  • 深度可定制的工具化爬虫系统的设计与实现(北京邮电大学·李笑语)
  • 网络新闻语料库建设及其分布式检索系统研究(华中师范大学·鲁松)
  • 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
  • 基于Python的非结构化数据检索系统的设计与实现(南京邮电大学·董海兰)
  • 科研项目数据入库模块的设计与实现(华中科技大学·徐涵)
  • 山东省福利彩票运营管理系统的设计与实现(山东大学·原泽民)
  • 基于爬虫的网络新闻订阅和跟踪系统的设计与实现(华中科技大学·严园)
  • 网络流量统计分析系统(吉林大学·石景龙)
  • 利用Nutch研究与实现支持Ajax动态网页的网络爬虫系统(内蒙古师范大学·李松)
  • 金融信贷背景下分布式信息采集策略研究(南京大学·王涛)
  • 一个数据需求管理系统的设计与实现(华中科技大学·陈志)
  • 网络舆情爬虫系统的设计与实现(厦门大学·李海燕)
  • 文本综合处理平台的研究与实现(济南大学·王孟孟)
  • 基于关键词的微博爬虫系统的设计与实现(浙江工业大学·叶婷)
  • 文本综合处理平台的研究与实现(济南大学·王孟孟)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计驿站 ,原文地址:https://bishedaima.com/yuanma/35413.html

相关推荐

发表回复

登录后才能评论