网络编程
位置:首页>> 网络编程>> Python编程>> python 爬虫 实现增量去重和定时爬取实例

python 爬虫 实现增量去重和定时爬取实例

作者:X_Special  发布时间:2022-01-26 01:01:37 

标签:python,爬虫,去重,爬取

前言: 在爬虫过程中,我们可能需要重复的爬取同一个网站,为了避免重复的数据存入我们的数据库中 通过实现增量去重 去解决这一问题 本文还针对了那些需要实时更新的网站 增加了一个定时爬取的功能;

本文作者同开源中国(殊途同归_);

解决思路:

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

来源:https://blog.csdn.net/X_Special/article/details/80989345

0
投稿

猜你喜欢

  • 本文实例讲述了Python复制文件操作用法。分享给大家供大家参考,具体如下:这里用python实现了一个小型的自动发版本的工具。这个“自动发
  • 数据共享是数据库最基本的特征之一。但是数据共享虽然为员工带来了便利,但也产生了一些负面作用。例如因用户并发存取而导致的对数据一致性的破坏、由
  • MySQL 5.1采用了基于密码混编算法的鉴定协议,它与早期客户端(4.1之前)使用的协议不兼容。如果你将服务器升级到4.1之上,用早期的客
  • //重新封装document对象 var Console={ Write:function(msg){alert(msg);} }; //P
  • 今天简单使用了一下python的re模块和lxml模块,分别利用的它们提供的正则表达式和xpath来解析页面源码从中提取所需的title,x
  • 具体如何屏蔽更多的快捷键可以自行google搜索。 这里要说的是如何屏蔽后去执行自定义的事件。这里为了方便使用的Kibo做例子,使用goog
  • 有没有想过用尺子来直接量网页上的区块间距,文字行高?屏幕标尺就是干这个的。这个功能非常适合F2E在调试样式尺寸的时候使用。打开屏幕标尺,屏幕
  • 因为固体物理书上的球面投影图太难看,就自学 javascipt 用 echarts 做了个可交互的,效果如下:上面为立方晶系主要晶面(晶向)
  • 说到运维报警,我觉得都可以写个长篇历史来详细解释了报警的前世来生,比如最早报警都是用邮件,但邮件实时性不高,比如下班回家总不能人一直盯着邮箱
  • 在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持。可在编译时使用 –disable-CLI。一旦编
  • 接着上一篇,统一思想,遵循标准。如何遵循标准,其实标准有很多,结构标准,表现标准,行为标准。选择标准规范,就优先选择W3C推荐的标准。结构标
  • pandas中的agg函数python中的agg函数通常用于调用groupby()函数之后,对数据做一些聚合操作,包括sum,min,max
  • 本文实例讲述了PHP 对象继承原理与简单用法。分享给大家供大家参考,具体如下:对象继承继承已为大家所熟知的一个程序设计特性,PHP 的对象模
  • 带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个
  • 一、join函数(一)参数使用说明描述Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。语法join()
  • 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。 下面是具体的做法: 一:跳
  • 为了让某个数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然已经有许多可用的编码方式了,比如 JSON、XML、Goog
  • 因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。当然,其它字段可以辅助我们在执行这些操作时消除共
  • 该语句的作用是:启用或禁用错误处理程序。一般用法如下:On Error Resume NextOn Error GoTo 0如果在您的代码中
  • django创建自定义模板处理器:一、需求来源:在django开发中,页面是通过template(模板)进行渲染的,对于一些数据,可以通过{
手机版 网络编程 asp之家 www.aspxhome.com