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实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
Python打印输出数组中全部元素
Mar 13 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
python使用PyQt5的简单方法
Feb 27 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
python基于socket函数实现端口扫描
May 28 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
python 决策树算法的实现
Oct 09 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
php实现文件下载功能的几个代码分享
2014/05/10 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JavaScript的词法结构精华篇
2018/10/17 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
PyQt5实现下载进度条效果
2018/04/19 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
JS原生实现轮播图的几种方法
2021/03/23 Javascript
怎么写自荐书范文
2014/02/12 职场文书
《草原》教学反思
2014/02/15 职场文书
房屋买卖协议书
2014/04/10 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
学校国庆节活动总结
2015/03/23 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL