1.為了能夠將爬取到的資料存入本地資料庫,現在本地建立乙個mysql資料庫example,然後
在資料庫中建立一張**test,示例如下:
drop table if exists `test`; create table `douban_db` ( `id` int(11) not null auto_increment, `url` varchar(20) not null, `direct` varchar(30), `performer` date, `type` varchar(30), `district` varchar(20) not null, `language` varchar(30), `date` varchar(30), `time` varchar(30), `alias` varchar(20) not null, `score` varchar(30), `comments` varchar(300), `scenario` varchar(300), `imdb` varchar(30), primary key (`id`) ) engine=myisam default charset=utf8;
2.如果使用開源框架pyspider來進行爬蟲的話,預設情況下,會把爬取到的結果存放到result.db這個sqilite資料庫中,但是為了方便操作,我們將結果存放到mysql中。接下
來要做的乙個操作就是重寫on_result方法,例項化呼叫我們自己實現的sql方法,具體
例項如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# created on 2015-03-20 09:46:20
# project: fly_spider
關於上面這段**,有下面幾點需要說明的:
a. 為了避免伺服器判斷出客戶端在進行爬蟲操作,從而禁止ip訪問(具體表現為出現403禁止訪問),我們需要在發出請求的時候加上乙個http頭,偽裝成使用瀏覽器訪問,具體用法如下:
headers= if sql.database != none: config['database'] = sql.database try: cnx = mysql.connector.connect(**config) sql.connection = cnx return true except mysql.connector.error as err: if (err.errno == errorcode.er_access_denied_error): print "the credentials you provided are not correct." elif (err.errno == errorcode.er_bad_db_error): print "the database you provided does not exist." else: print "something went wrong: " , err return false def replace(self,tablename=none,**values): if sql.connection == '': print "please connect first" return false tablename = self.escape(tablename ) if values: _keys = ", ".join(self.escape(k) for k in values) _values = ", ".join([self.placeholder, ] * len(values)) sql_query = "replace into %s (%s) values (%s)" % (tablename, _keys, _values) else: sql_query = "replace into %s default values" % tablename cur = sql.connection.cursor() try: if values: cur.execute(sql_query, list(itervalues(values))) else: cur.execute(sql_query) sql.connection.commit() return true except mysql.connector.error as err: print ("an error occured: {}".format(err)) return false
學習文件:
測試環境:
posted on 2017-07-21 13:31收藏
Python爬蟲 增量式爬蟲 通用爬蟲 聚焦爬蟲
通用爬蟲 聚焦爬蟲 增量式爬蟲 通用爬蟲 和 聚焦爬蟲 之前的部落格有講解過了,本篇主要講解增量式爬蟲 適用於持續跟蹤 的資料爬取。例如三個月前,爬取了所有資料。更新了100條資料,此時爬取跟新的100條資料即可。指定起始url,基於crawlspider獲取頁碼url 基於rule請求獲取的頁碼u...
增量式爬蟲
目的 增量式爬蟲 在上一次爬取的基礎上繼續爬取資料,通過增量式爬蟲,我們可以繼續爬取因故未完全爬完的資料,或 更新的資料.去重那麼如何判斷我們是否爬過某條資料是關鍵,顯然,每次爬取判斷該資料是否存在是不可取的 所以這裡我們利用了redis資料庫集合自動去重的功能.向redis 庫中的集合裡放 ps ...
增量式爬蟲
增量式爬蟲 引言 當我們在瀏覽相關網頁的時候會發現,某些 定時會在原有網頁資料的基礎上更新一批資料,例如某電影 會實時更新一批最近熱門的電影。會根據作者創作的進度實時更新最新的章節資料等等。那麼,類似的情景,當我們在爬蟲的過程中遇到時,我們是不是需要定時更新程式以便能爬取到 中最近更新的資料呢?一....