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(模板)进行渲染的,对于一些数据,可以通过{