用Python 寫網路爬蟲-第一個網路爬蟲

CodeSnippet 抓取代碼片段

目標

抓取CodeSnippet中的代碼片段

代碼片段

分析

DOM結構

我們想要抓取的內容在為

li class="con-code bbor" 所以 BeautifulSoup find()方法獲取到該標籤然後獲取其文本內容

準備

準備我們爬蟲比用的兩個模塊

from urllib2 import urlopenfrom bs4 import BeautifulSoup

編寫抓取代碼

# 抓取http://www.codesnippet.cn/index.html 中的代碼片段def GrapIndex(): html = "http://www.codesnippet.cn/index.html" bsObj = BeautifulSoup(urlopen(html), 'html.parser')  return bsObj.find("li", {"class":"con-code bbor"}).get_text()

當我們抓取到我們想要的數據之後接下來要做的就是把數據寫到資料庫里,由於我們現在抓取數據簡單,所以只寫文件即可!

Advertisements

def SaveResult(): codeFile=open("code.txt", "a") # 追加  for list in GrapIndex(): codeFile.write(list) codeFile.close()

當我們在寫文件的時候出現了以下錯誤,而下面這個錯誤的造成原因則是由於python2.7是基於ascii去處理字元流,當字元流不屬於ascii範圍內,就會拋出異常(ordinal not in range(128))

UnicodeEncodeError: 'ascii' codec can't encode character u'u751f' in position 0: ordinal not in range(128)

Advertisements

分析

python2.7是基於ascii去處理字元流,當字元流不屬於ascii範圍內,就會拋出異常(ordinal not in range(128))

解決辦法

import sysreload(sys)sys.setdefaultencoding('utf-8')

完整代碼展示

from urllib2 import urlopenfrom bs4 import BeautifulSoupimport osimport sysreload(sys)sys.setdefaultencoding('utf-8')def GrapIndex(): html = "http://www.codesnippet.cn/index.html" bsObj = BeautifulSoup(urlopen(html), 'html.parser') return bsObj.find("li", {"class":"con-code bbor"}).get_text()def SaveResult():  codeFile=open("code.txt", "a")  for list in GrapIndex():  codeFile.write(list)  codeFile.close() if __name__ == '__main__': for i in range(0,9): SaveResult()

Advertisements

你可能會喜歡