……
可能出現的問題:
如果沒有得到上述的輸出結果的話,仔細看一下跑出的代碼,如果有這樣一條:
: 'ascii' codec can't byte 0xe6 in 0: not in range(128)
說明的str默認是ascii編碼,和編碼沖突,于是就會報這個標題錯誤
只需要在main.py中加上:
sys
(sys)
sys.(‘utf8')
就能將使問題得到解決。
4.5 小項目難度加深
上面的那個小項目仔細看看,item和都沒有涉及到,只是爬取了數據而并沒有進行存儲操作,的結構化的特點并沒有完全的體現出來,下面將用另一個經典小項目對的結構功能進行更深一步的闡述。
4.5.1 對于第一步產生的目錄子目錄的解釋:
輸入命令:
ls
4.5.2 Item就像是中的字典
從前面的內容可以知道, Item是裝載數據的容器,我們需要將Item模型化來獲取從站點抓取的數據。
中在Item的注釋中已經注明了寫法,最后寫在自創的文件中(如例一中的.py),可以實現抓取數據的存儲。
在自創的文件中(本例叫.py),需要先導入item的那個函數
from .py
4.5.3 中Feed輸出的變量設置
在Item存儲了抓取的數據后,如果想把它列成excel表格打印出的話,需要在.py中進行設置,加入以下兩行:
:指示輸出格式,csv/xml/json/
: 指示輸出位置,可以是本地,也可以是FTP服務器
例如:
= u'file:///G://dou.csv'
= ‘CSV'
這樣的話網頁制作在代碼上加鏈接,輸出的文件存在G盤,名字叫dou.csv,是一個csv文件。
五. 對建立項目的
5.1 如何更快地找 bug
對于一個新手而言,學會用編寫爬蟲程序,困難更多在于對的配置和對正則表達式的適應,如果把完成這個項目分成很多邏輯板塊的話,比較建議的是先理解的信息流和數據流,這樣的話即使程序跑出bug(幾率特別大)也能很快清楚問題在哪個文件里面。的不是很適合調試bug,它并不會直接把key error顯示出來,所以最好腦中能區分出上述那些功能板塊,對應著去找bug。
5.2 共存解釋器可能導致的種種報錯
這篇文章的主要目的是介紹這個框架的使用,也著重講述了在完成一個爬蟲程序可能面臨到的種種問題,包括電腦中存在多個解釋器時可能出現的各種報錯,筆者最后總結:如果導入包的時候一直報錯,就更改run/里面的解釋器;如果在一直報錯, to ,就重建,選擇usr/bin目錄下的外部庫。
六. 知識補充
6.1 中的類和方法
from .http ,
():
[ ( url, mata={'':1}=login ) ] #加入meta想要獲取
這里的url就是你登陸的login URL,訪問這個url時,會返回你一個,這個里面就有下一步登陸的時候要發送的code。那么這里的到login這個方法的功能就是要從返回的里面通過正則表達式或者結合xpath等得到這個code。
中將下載的返回給,也就是我定義的login方法,那么在login方法中,除了要解析并獲得動態code外,還可以進行模擬登陸,在login中可以加入:
def login(self,):
code=.xpath('//h1/text()').() #就是為了獲得code,也可以結合re來提取
={} #模擬瀏覽器登陸的
={} #要你post的數據,包括上面獲得的code
[.( url, =, =, meta={'':.meta[''], =loged , =x } ) ]
#注意這里并沒有用,且用的是返回的中的,也就是上面那里記錄的。另外此時的url則是你真正post數據的url,一般可以通過獲得。其實,這里也可以這個時候才獲得,這樣可以獲得登陸以后的。這個方法被調用以后,就成功登陸了,那么此時可以在loged方法中通過下面rl這個方法來訪問登陸以后的其他頁面。
#這里如果需要輸入驗證碼,可以采用下載圖片并手動輸入的方式進行,在另外一片記錄里可以看到。
如果該方法被重寫了,那么里面的url將不會被首先訪問,后面想要訪問的時候則要特別的“強調“。會在后面說明。
還要注意的是,只被自動調用一次。
rl(url):
這個方法就是當你指定了url的時候,則通過這個方法網頁制作在代碼上加鏈接,可以自動返回給parse。中能夠自動調用parse的方法,就我目前的學習來看,只有這兩個(和rl)。這個之所以重要,是因為要結合后面說的中的rule。
可以通過rl()來實現訪問里面的url:
def loged(self, ):
for url in :
yield rl(url)
parse():
中默認將傳遞到的地方就是parse(),這里顧名思義是用來提取網頁內容的地方,在類中可以在這里實現網頁內容提取,但是在中,parse()實現用rule中獲得的link進行進一步處理,所以在中不建議重寫parse方法。
rule():
rule提供了如何指導獲取鏈接的的功能,其具體實現是:
from . as LKE