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爬虫常用的模块分析
Aug 29 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
python skimage 连通性区域检测方法
Jun 21 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
django中间键重定向实例方法
Nov 10 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
centos7中安装python3.6.4的教程
Dec 11 Python
python实现串口通信的示例代码
Feb 10 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
Python 里最强的地图绘制神器
Mar 01 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微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
关于JavaScript中string 的replace
2013/04/12 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Pytorch之parameters的使用
2019/12/31 Python
Python 自由定制表格的实现示例
2020/03/20 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
运动会开幕式主持词
2014/03/28 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2014年团支部工作总结
2014/11/17 职场文书
经理岗位职责
2015/02/02 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python
Golang gRPC HTTP协议转换示例
2022/06/16 Golang