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搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
Python随机函数random()使用方法小结
Apr 29 Python
python实现图片筛选程序
Oct 24 Python
Python类的继承用法示例
Jan 31 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
python实现猜数字游戏
Mar 25 Python
python模块导入的方法
Oct 24 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
python fabric使用笔记
2015/05/09 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python使用minidom读写xml的方法
2015/06/03 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python抖音表白程序源代码
2019/04/07 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
西班牙在线药店:DosFarma
2020/03/28 全球购物
大学生开西餐厅创业计划书
2014/02/01 职场文书
职工趣味运动会方案
2014/02/10 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
学生安全承诺书
2014/05/22 职场文书
初中重阳节活动总结
2015/05/05 职场文书
总结Python使用过程中的bug
2021/06/18 Python