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 相关文章推荐
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Django实现表单验证
Sep 08 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Django REST framework 单元测试实例解析
Nov 07 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
基于plt.title无法显示中文的快速解决
May 16 Python
深入了解Python 方法之类方法 &amp; 静态方法
Aug 17 Python
python中pickle模块浅析
Dec 29 Python
python3.9之你应该知道的新特性详解
Apr 29 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
django框架使用方法详解
2019/07/18 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
国旗下的演讲稿
2014/05/08 职场文书
银行奉献演讲稿
2014/09/16 职场文书
辩论会主持词
2015/07/03 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
辅导员学期工作总结
2015/08/14 职场文书
员工给公司的建议书
2019/06/24 职场文书
python实现进度条的多种实现
2021/04/29 Python
mysql联合索引的使用规则
2021/06/23 MySQL