python爬取双色球数据更新及数据库使用
- 解析网站并获取数据
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)]')
- 链接数据库
python
# 链接数据库
client = pymysql.connect(host='localhost', port=3306, user='root', password='123456', charset='utf8', db='bangumi')
cursor = client.cursor()
- 普通获取数据
- 更新数据这部分从数据库中获取数据,然后反转顺序,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
- 数据顺序反转,按照网站上xpath写法获取第1个数据,即最新的数据放到数据库中。
- 完整代码
```python import requests from fake_useragent import UserAgent from lxml import html import pymysql
-
这样排序会让更新之后最新的在数据最后,但是一开始排序的时候不会出现问题,是从新到旧的排序。于是因为有点强迫症,最后还是改成从旧到新排序。只需要改动几行代码即可,反转数据在提取红球蓝球数据前,保证数据最新,判断时每次存在就让
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