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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
python实现文件名批量替换和内容替换
Mar 20 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
PyQt5实现拖放功能
Apr 25 Python
python实现flappy bird小游戏
Dec 24 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python实现BP神经网络回归预测模型
Aug 09 Python
在Tensorflow中查看权重的实现
Jan 24 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
Python判断字符串是否为合法标示符操作
Sep 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
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js实现蒙版效果
2020/01/11 Javascript
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python生成大写32位uuid代码
2020/03/03 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
房屋委托书范本
2014/04/04 职场文书
低碳生活倡议书
2014/04/14 职场文书
代领毕业证委托书
2014/08/02 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
创先争优个人承诺书
2014/08/30 职场文书
投资意向协议书
2015/01/29 职场文书
信用卡收入证明范本
2015/06/12 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
MongoDB数据库之添删改查
2022/04/26 MongoDB