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()
当我们抓取到我们想要的数据之后接下来要做的就是把数据写到数据库里,由于我们现在抓取数据简单,所以只写文件即可!
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)
分析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()