python 爬蟲 實現(xiàn)增量去重和定時爬取實例
前言: 在爬蟲過程中,我們可能需要重復的爬取同一個網(wǎng)站,為了避免重復的數(shù)據(jù)存入我們的數(shù)據(jù)庫中 通過實現(xiàn)增量去重 去解決這一問題 本文還針對了那些需要實時更新的網(wǎng)站 增加了一個定時爬取的功能;
本文作者同開源中國(殊途同歸_);
解決思路:
1.獲取目標url
2.解析網(wǎng)頁
3.存入數(shù)據(jù)庫(增量去重)
4.異常處理
5.實時更新(定時爬取)
下面為數(shù)據(jù)庫的配置 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進行網(wǎng)頁解析
# 實現(xiàn)了增量去重
# 實現(xiàn)了定時爬取
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 已經(jīng)存在!' % 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 爬蟲 實現(xiàn)增量去重和定時爬取實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中l(wèi)ambda表達式的用法示例小結(jié)
本文主要展示了一些lambda表達式的使用示例,通過這些示例,我們可以了解到lambda表達式的常用語法以及使用的場景,感興趣的朋友跟隨小編一起看看吧2024-04-04
python實現(xiàn)簡易內(nèi)存監(jiān)控
這篇文章主要介紹了python實現(xiàn)簡易內(nèi)存監(jiān)控,每隔3秒獲取系統(tǒng)內(nèi)存,當內(nèi)存超過設定的警報值時,獲取所有進程占用內(nèi)存并發(fā)出警報聲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
python畫圖時linestyle,color和loc參數(shù)的設置方式
這篇文章主要介紹了python畫圖時linestyle,color和loc參數(shù)的設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Python實現(xiàn)確認字符串是否包含指定字符串的實例
下面小編就為大家分享一篇Python實現(xiàn)確認字符串是否包含指定字符串的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
tensorflow estimator 使用hook實現(xiàn)finetune方式
今天小編就為大家分享一篇tensorflow estimator 使用hook實現(xiàn)finetune方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python實現(xiàn)RLE格式與PNG格式互轉(zhuǎn)
在機器視覺領(lǐng)域的深度學習中,很多數(shù)據(jù)集的標注文件使用RLE的格式。但是神經(jīng)網(wǎng)絡的輸入一定是一張圖片,為此必須把RLE格式的文件轉(zhuǎn)變?yōu)閳D像格式。本文將利用Python實現(xiàn)RLE格式與PNG格式互轉(zhuǎn),感興趣的可以了解一下2022-08-08
python 利用opencv實現(xiàn)圖像網(wǎng)絡傳輸
這篇文章主要介紹了python 如何利用opencv實現(xiàn)圖像網(wǎng)絡傳輸,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11

