CodeSnippet 抓取代码片段
目标
分析
代码
我们想要抓取的内容在为 li class="con-code bbor" 所以 BeautifulSoup find()方法获取到该标签然后获取其文本内容
准备
准备我们爬虫比用的两个模块
from urllib2 import urlopen
from 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 sys
reload(sys)
sys.setdefaultencoding('utf-8')
完整代码展示
from urllib2 import urlopen
from bs4 import BeautifulSoup
import os
import sys
reload(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()