mysql 去重con_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
以上这篇python 爬虫 实现增量去重和定时爬取实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。
相关文章:

oracle数据导出方法,oracle多种导入导出数据方法
dmp格式:1.dmp格式的导出可以通过客户端工具(PL/SQL)操作来完成,通过菜单栏---->Tools---->Export Tables,然后设置勾选相应参数即可,rows代表是否连同数据一起导出2.导出还可以用cmd工具,速度也更快:exp [email protected] filed:\***.dmp fullyfully表示全导…

java 枚举转byte_如何在java中将一个枚举转换为另一个枚举?
一种方法是在您的详细枚举中定义一个方法asSimple():public enum Detailed {PASSED {OverrideSimple asSimple() {return PASSED;}},INPROCESS {OverrideSimple asSimple() {return RUNNING;}},ERROR1,ERROR2,ERROR3;public Simple asSimple() {return Simple.ERROR…

BZOJ4566: [Haoi2016]找相同字符
BZOJ4566: [Haoi2016]找相同字符 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。Input 两行,两个字符串s1,s2,长度分别为n1&#x…

mysql索引空间太大_MySQL优化索引
1. MySQL如何使用索引索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,花费越多。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间查找的位置ÿ…

Mac-sublime text 3破解版
在史蒂芬周下载破解版安装package controlimport urllib.request,os,hashlib; h df21e130d211cfc94d9b0905775a7c0f 1e3d39e33b79698005270310898eea76; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urll…

oracle library cache lock,【案例】Oracle等待事件library cache lock产生原因和解决办法...
【案例】Oracle等待事件library cache lock产生原因和解决办法时间:2016-12-07 18:56 来源:Oracle研究中心 作者:网络 点击:次天萃荷净Oracle研究中心案例分析:运维DBA发现Oracle数据库出现library cache lock等待事件导致cpu使用非常高,结合案例来…

python uiautomation选择list内容_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
首先安装pip install uiautomation, 再运行本文代码。或者下载https://github.com/yinkaisheng/Python-UIAutomation-for-Windows代码(包含了uiautomation module),直接运行demos目录里的脚本get_qq_group_members.pyuiautomation.py是我写的一个python封装微软UIAu…

【BZOJ】2734: [HNOI2012]集合选数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id2734 考虑$N4$的情况: \begin{bmatrix} 1&3 &X \\ 2&X &X \\ 4&X &X \end{bmatrix} 其实就是吧最小值丢在了矩阵中${(0,0)}$的位置上,对于矩阵中的任意…

Linux命令:tar命令批量解压方法总结
tar命令批量解压方法总结 (2010-05-24 17:48:46) 转载▼标签: tar 批量解压 杂谈 分类: linux学习 由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享ÿ…

php column not found,java.sql.SQLException: Column 'cloumn name' not found.
Hi,My system configuration:Mandrake 9.0 Tomcat 4.1.24 MySQL 4.0.12. Apache[問題]我有一隻Servlet app. 如果 Tomcat MySQL APache IBM JDK 1.3 or SUN JDK 1.4.1_02在一開機時就起動. 我在http://localhost:8080/servlet/myApp 是可以看到Servlet run 起來. 可是如…

批量新建文件夹并命名_dos命令实现批量新建文件夹
1、批量新建文件夹(使用命令:MD)实现案例:假如我们要新建10个文件夹,这10个文件夹的名称分别是数字1-10来命名。以下详细步骤:1)在excel表里面把需要批量新建的文件夹名字放到一列(假…

java去掉mongodb日志_如何禁用mongoDB java驱动程序日志记录?
我试图禁用mongo-java-driver-3.0.0的日志输出.我试图在我的应用程序开始之前设置它们,然后加载mongo驱动程序,但它没有帮助.// Enable MongoDB logging in generalSystem.setProperty("DEBUG.MONGO", "false");// Enable DB operation tracingSystem.setP…

5793. 【NOIP2008模拟】小S练跑步
Description 小S是一个爱锻炼的孩子,他在放假期间坚持在A公园练习跑步。但不久后,他就开始为在重复的地点练习感到厌烦了,他就打算去B公园跑步。但是小S由于没有去过B公园,他不知道B公园是否适合练习跑步,又不知道在B公…

spring访问oracle数据库表,Spring访问oracle数据库配置步骤
1.spring 对数据库访问的支持当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC、Hibernate、java持久化API或其它持久化框架。幸好的是spring能够支持所有这些持久化机制。DAO(data access boject)数据访问对象,这个名字就很形象描述…

wamp的mysql单独使用_Windows 7+8.1+10 单独安装配置 PHP+Apache+MySQL(不使用 WAMP)
Windows 8.1 单独安装配置 PHPApacheMySQL(不使用 WAMP)本文同样适用于Windows7和100x00 PHP【下载】http://www.doczj.com/doc/b3aef488f18583d048645937.html/downloads.php注:选择线程安全的版本,留意 VC 支持库的版本,9、11、14 分别对应…

【bzoj3209】 花神的数论题
http://www.lydsy.com/JudgeOnline/problem.php?id3209 (题目链接) 题意 ${sum(i)}$表示${i}$的二进制表示中${1}$的个数。求${\prod^n sum(i)}$ Solution ${f_{i,s}}$表示dp到第${i}$位,已经有${s}$个${1}$时的乘积。然后一路dfs就可以了。 细节 LL,返…

html 复选框 mysql_Html:实现带复选框的下拉框(一)
概述项目中要用到可多选的下拉框(select),发现HTML中无此控件,故手动模拟实现一下。模拟所用元素:input,ul,li代码模拟实现带复选框的下拉列表body{margin: 20px;}input{width: 150px;height: 30px;}ul{display: none;…

oracle date 转换 timestamp,Oracle timestamp类型转换成date类型
今天需要根据时间判断,统一修改某一个字段的数据。然后打开数据库发现,时间类型为timestamp类型。如下:然后呢,这对我不是喝口水就可以解决的问题吗?解决方案如下:我需要改这张表某个字段的内容,…

项目微管理29 - 转正
说起来,考核其实是一类活动的统称了,中国的历史上也由来已久,大家非常熟悉的各种选拔人才的制度中非常关键的一项就是“考核”,还有现在大家熟知的“考试”、“考证”、“考评”,其实都是属于这个范畴,它们…

mysql中3张表如何关联查询_mysql三张表关联查询
三张表,需要得到的数据是标红色部分的。sql如下:select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b.rremark,c.deptid,c.deptname,c.deptremarkfrom table1 a,table2 b,table3 c where a.sems_role_ridb.rid and a.udeptidc.d…

20170215学习计划
1.Springboot框架 http://blog.csdn.net/isea533/article/details/50278205 http://jinnianshilongnian.iteye.com/blog/1997192 2.docker百度云视频 3.jsp基础教程-菜鸟教程看完 4.使用springboot、mybatis框架开始houji项目 5.ssh免密码 6.java中enum枚举的使用方法htt…

java map prefix_从键以特定表达式开头的Map中获取所有值的最快方法
小编典典如果您使用NavigableMap(例如TreeMap),则可以利用基础树数据结构的好处,并执行以下操作(非常O(lg(N))复杂):public SortedMap getByPrefix(NavigableMap myMap,String prefix ) {return myMap.subMap( prefix, prefix Character.MAX…

linux如何查看指定目录下文件内容,Linux 系统下通过关键词查找指定目录下的文件内容...
#!/bin/bash# 作者:靑龍一笑(C.S.Ricen)# 功能:根据指定的关键词,查找指定目录下的文件内容# 要查找的目录Search_Dir/opt/datas/# 关键字列表Keyworks_Listkeyworks.listif [ ! -f $Keyworks_List ]; thenecho "请先设置关键词列表&…

Behave step matcher
behave 提供3中step匹配模式parsecfparse 基于parse的扩展, 支持cardinality field syntax?re 支持在step中定义正则表达式parse 是默认的step mathcer, 他被使用最多, 有以下特点 上手容易, 易读性好, 好理解支持预定义的数据类型和用户自定义类型可以在自定义数据类型中使…

MySQL开发医药管理系统_java Web开发医药后台管理系统mysql版本源代码下载,支持中英文...
package com.lyq.dao;import com.lyq.persistence.Medicine;import com.lyq.util.HibernateFilter;/*** 药品数据库操作类** author Li Yong Qiang*/public class MedicineDao extends SupperDao {/*** 查询药品信息** param id* return Medicine*/public Medicine loadMedicin…

php include include_once 区别,「PHP」include()、include_once()、require()、require_once()的用法及区别...
1、include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行。使用require语句来调用…

[dp] Jzoj P5804 简单的序列
Description 从前有个括号序列 s,满足 |s| m。你需要统计括号序列对 (p, q) 的数量。其中 (p, q) 满足 |p| |s| |q| n,且 p s q 是一个合法的括号序列。Input 从文件 bracket.in 中读入数据。第一行两个正整数 n, m。第二行一个长度为 m 的括号序列…

大话设计模式读书笔记--4.代理模式
生活中的例子: 班主任让班长通知班委下午3点开会班长就是班主任的代理 代理模式的目的是: 隐藏真实访问对象,同时可以处理别的事情 定义 代理模式:为其他对象提供一种代理以控制对这个对象的访问 也就是说,代理是一个中介, 它连接客户端和目标对象,同时可以附加对种用途 模式结…

mysql 5.7 1054_MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法
MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法发布时间:2020-10-14 16:01:38来源:脚本之家阅读:81作者:剑侠365新安装的MySQL5.7,登录时提示密码错误,安装的时候并没有更改密码,后来通过…

linux命令注入,Linux kernel本地命令注入漏洞
Linux kernel本地命令注入漏洞2005-10-19eNet&CiweekLinux kernel 2.2.6Linux kernel 2.2.5Linux kernel 2.2.4Linux kernel 2.2.3Linux kernel 2.2.2Linux kernel 2.2.1Linux kernel 2.2 .x RedHat Linux 6.2 alpha RedHat Linux 6.2 i386 RedHat Linux 6.2 sparcLinux ke…