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 不同对象比较大小示例探讨
Aug 21 Python
Python深入学习之对象的属性
Aug 31 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python设置随机种子实例讲解
Sep 12 Python
jupyter notebook的安装与使用详解
May 18 Python
使用pth文件添加Python环境变量方式
May 26 Python
详细分析Python collections工具库
Jul 16 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Python自然语言处理之切分算法详解
Apr 25 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
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
JavaScript中this详解
2015/09/01 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
python爬取个性签名的方法
2018/06/17 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
书法大赛策划方案
2014/06/04 职场文书
五一活动标语
2014/06/30 职场文书
银行业务授权委托书
2014/10/10 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
小马王观后感
2015/06/11 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js