python 爬虫 实现增量去重和定时爬取实例


Posted in Python onFebruary 28, 2020

前言: 在爬虫过程中,我们可能需要重复的爬取同一个网站,为了避免重复的数据存入我们的数据库中 通过实现增量去重 去解决这一问题 本文还针对了那些需要实时更新的网站 增加了一个定时爬取的功能;

本文作者同开源中国(殊途同归_);

解决思路:

1.获取目标url

2.解析网页

3.存入数据库(增量去重)

4.异常处理

5.实时更新(定时爬取)

下面为数据库的配置 mysql_congif.py:

import pymysql
 
 
def insert_db(db_table, issue, time_str, num_code):
  host = '127.0.0.1'
  user = 'root'
  password = 'root'
  port = 3306
  db = 'lottery'
  data_base = pymysql.connect(host=host, user=user, password=password, port=port, db=db)
  cursor = data_base.cursor()
  try:
    sql = "INSERT INTO %s VALUES ('%s','%s','%s')" % (db_table, issue, time_str, num_code)
    cursor.execute(sql)
    data_base.commit()
  except ValueError as e:
    print(e)
    data_base.rollback()
  finally:
    cursor.close()
    data_base.close()
 
 
def select_db(issue, db_table):
  host = '127.0.0.1'
  user = 'root'
  password = 'root'
  port = 3306
  db = 'lottery'
  data_base = pymysql.connect(host=host, user=user, password=password, port=port, db=db)
  cursor = data_base.cursor()
  try:
    sql = "SELECT '%s' FROM %s " % (issue, db_table)
    cursor.execute(sql)
    data_base.commit()
  except ValueError as e:
    print(e)
    data_base.rollback()
  finally:
    return issue

接下来是主要代码 test.py:

# 使用bs4进行网页解析
# 实现了增量去重
# 实现了定时爬取
import datetime
import time
 
from bs4 import BeautifulSoup
import requests
 
 
from mysql_config import insert_db
from mysql_config import select_db
 
 
def my_test():
  db_table = 'lottery_table'
  url = 'http://kj.13322.com/kl10_dkl10_history_dtoday.html'
  res = requests.get(url)
  content = res.content
  soup = BeautifulSoup(content, 'html.parser', from_encoding='utf8')
  c_t = soup.select('#trend_table')[0]
  trs = c_t.contents[4:]
  for tr in trs:
    if tr == '\n':
      continue
    tds = tr.select('td')
    issue = tds[1].text
    time_str = tds[0].text
    num_code = tr.table.text.replace('\n0', ',').replace('\n', ',').strip(',')
    print('期号:%s\t时间:%s\t号码:%s' % (str(issue), str(time_str), str(num_code)))
    issue_db = select_db(issue, db_table)
    try:
      if issue_db == issue:
        insert_db(db_table, issue_db, time_str, num_code)
        print('添加%s到%s成功' % (issue_db, db_table))
    except Exception as e:
      print('%s 已经存在!' % issue_db)
      print(e)
 
 
if __name__ == '__main__':
  flag = 0
  now = datetime.datetime.now()
  sched_time = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, now.second) +\
         datetime.timedelta(seconds=3)
  while True:
    now = datetime.datetime.now()
    if sched_time < now:
      time.sleep(3)
      print(now)
      my_test()
      flag = 1
    else:
      if flag == 1:
        sched_time = sched_time + datetime.timedelta(minutes=2)
        flag = 0

以上这篇python 爬虫 实现增量去重和定时爬取实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
删除目录下相同文件的python代码(逐级优化)
May 25 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
python实现批量监控网站
Sep 09 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
python判断设备是否联网的方法
Jun 29 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python实现名片管理系统
Nov 29 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
分享PyCharm的几个使用技巧
Nov 10 Python
Python批量将图片灰度化的实现代码
Apr 11 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
python如何获取网络数据
Apr 11 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 #Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 #Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 #Python
Python 之 Json序列化嵌套类方式
Feb 27 #Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 #Python
You might like
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
Python 解析XML文件
2009/04/15 Python
python快速排序代码实例
2013/11/21 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python文本数据相似度的度量
2018/03/12 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Pygame的程序开始示例代码
2020/05/07 Python
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
工商企业管理实习自我鉴定
2013/12/04 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
2014年国庆节寄语
2014/09/19 职场文书
交通事故委托书范本
2014/09/28 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
师德师风事迹材料
2014/12/20 职场文书
如何写辞职书
2015/02/26 职场文书
会计简历自我评价
2015/03/10 职场文书
钢琴师观后感
2015/06/12 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
公司出差管理制度范本
2015/08/05 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers