1. 程式人生 > >開始寫一個爬蟲(1)

開始寫一個爬蟲(1)

net 興趣 可能 pytho pycha 備註 其他 nco 編碼方式

因為是作為筆記寫的,所以會很啰嗦,而且代碼不會全部展示。。

首先,你要確定一個目標,就是你要爬的網站。我選的就不說了,比較邪惡,需要18歲以下的小僵屍繞路。

選好之後,構思下整個腳本的大致結構。

1.通過網站的查詢接口出一組比較感興趣的話題下的一些分組,獲取這些分組URL,存儲成一個list.

2.循環訪問這些分組的URL.

3.爬取每個分組下的圖片。

  (1)獲取圖片的URL,以list存儲。

  (2) 下載圖片。

  (3)判斷下一頁是否存在,如果存在,拼接URL,訪問下一頁。不存在的話,訪問下一組圖片。

ok,結構很簡單。

然後開始選擇工具。

我使用的python版本是3.6,IDE是pycharm,庫是urllib.request url.error re socket。

代碼中最重要的兩個函數urllib.request.Request()和urllib.request.urlopen()

給個敵臺鏈接https://blog.csdn.net/bo_mask/article/details/76067790 講的蠻好的。我自己研究的之後在寫。

urllib.request.urlopen()返回的是網頁的 HTTPResposne 類型的對象,使用read()函數讀取返回的時候,由於圖片的返回方式為byte類型,所以需要decode()轉碼。

如果轉碼成‘UTF-8’,可能會出現一個報錯‘‘utf-8‘ codec can‘t decode byte 0xcb in position 134: invalid continuation byte’,歸根到底是編碼的錯誤。

再網上看到三個解決方式:

  1.腳本開頭寫 #coding: utf-8 ,我這邊沒管用。

  2.變一種編碼方式,如decode(‘GBK‘)

  3.修改第二個參數errors,decode(encoding,errors),該參數的作用是‘設置不同錯誤的處理方案’。修改值為‘ignore‘.

    小備註:其他可能得值有 ‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 以及通過 codecs.register_error() 註冊的任何值。

再提一個小小的點,請求處一般要寫一個拋出錯誤的處理,網絡斷開之後,直接退出程序。

如:

try:
file = url_req(url,header)
except err.HTTPError as e:
print(‘network mistake: %s‘, e)
exit()
except Exception as e:
print(e)
exit()

有點小累,休息一會兒。

另外紀念一下今天杭州下大雪。

開始寫一個爬蟲(1)