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解析xml文件实例分析
May 27 Python
Python实现控制台输入密码的方法
May 29 Python
Python多线程下载文件的方法
Jul 10 Python
python中hashlib模块用法示例
Oct 30 Python
python中ASCII码和字符的转换方法
Jul 09 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
详解用Python练习画个美队盾牌
Mar 23 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
如何在django中运行scrapy框架
Apr 22 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
js 小数取整的函数
2010/05/10 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
python代码xml转txt实例
2020/03/10 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
房屋公证委托书
2014/04/03 职场文书
超市商业计划书
2014/05/04 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
车间安全生产标语
2014/06/06 职场文书
作风大整顿心得体会
2014/09/10 职场文书
学术会议领导致辞
2015/07/29 职场文书
公司新员工欢迎词
2015/09/30 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL