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使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
Python学习笔记之For循环用法详解
Aug 14 Python
python manage.py runserver流程解析
Nov 08 Python
简单介绍django提供的加密算法
Dec 18 Python
python复合条件下的字典排序
Dec 18 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
分享7个 Python 实战项目练习
Mar 03 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
模拟flock实现文件锁定
2007/02/14 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
PHP之短标签开启设置
2013/06/17 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
python比较2个xml内容的方法
2015/05/11 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
银行委托书范本
2014/04/04 职场文书
植树节标语
2014/06/27 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
家长会后的感想
2015/08/11 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL