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中functools模块的常用函数解析
Jun 30 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Python实现ATM系统
Feb 17 Python
keras:model.compile损失函数的用法
Jul 01 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
Pandas之缺失数据的实现
Jan 06 Python
python基础入门之字典和集合
Jun 13 Python
Python之matplotlib绘制饼图
Apr 13 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
php常用Stream函数集介绍
2013/06/24 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
javascript数组去掉重复
2011/05/12 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
Underscore源码分析
2015/12/30 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
python实现多进程代码示例
2018/10/31 Python
Python八皇后问题解答过程详解
2019/07/29 Python
基于python实现查询ip地址来源
2020/06/02 Python
python如何对链表操作
2020/10/10 Python
大学生自荐信
2013/12/11 职场文书
说明书格式及范文
2014/05/07 职场文书
行政监察建议书
2014/05/19 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
科技活动总结范文
2015/05/11 职场文书
爱国电影观后感
2015/06/19 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
python3读取文件指定行的三种方法
2021/05/24 Python
golang的文件创建及读写操作
2022/04/14 Golang
ant design charts 获取后端接口数据展示
2022/05/25 Javascript