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中使用动态变量名的方法
May 06 Python
python学习数据结构实例代码
May 11 Python
Python通过future处理并发问题
Oct 17 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python调用.net动态库实现过程解析
Jun 05 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
Python Matplotlib绘制动画的代码详解
May 30 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php 前一天或后一天的日期
2008/06/28 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
更改Python命令行交互提示符的方法
2015/01/14 Python
python实现神经网络感知器算法
2017/12/20 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
keras 多任务多loss实例
2020/06/22 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
什么是SCM(软件配置管理)
2014/08/16 面试题
管道维修工岗位职责
2013/12/27 职场文书
党支部书记先进事迹
2014/01/17 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记