这两天在看python,抱着一本python学习手册看了好几天了,感觉没有什么长进。听说python写网络爬虫挺好,就在网上搜了一下教程,跟着看来看,一知半解自己也模仿着写了一个小项目:爬取糗事百科笑料段子
或许是页面代码重写了吧,教程的代码不怎么好用,我模仿的该了一下正则表达式,修改了一下功能,感觉还能使,昨天晚上实现了。队友说:你这学爬虫心理就是爬黄段子啊==明明是糗事好不!
功能:爬取代码运行时糗事百科前6页的笑料段子,保存到当前文件夹的“1.txt”文件中。
参考教程:http://blog.csdn.net/pleasecallmewhy/article/details/8932310
糗事百科主页:http://www.qiushibaike.com
代码:
#coding=utf-8
import urllib2
import urllib
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
#---加载----
class Spider_Model:
def __init__(self,x):
self.page = x
#---将所有的段子都扣出来并且加到一个字符串中
def GetPage(self,page):
myUrl = "http://www.qiushibaike.com/hot/page/" + page
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
req = urllib2.Request(myUrl,headers = headers)
myResponse = urllib2.urlopen(req)
myPage = myResponse.read()
unicodePage = myPage.decode("utf-8")
#re.S是任意匹配模式,也就是说.可以匹配换行符
myItems = re.findall('<div class="content">(.*?)<!',unicodePage,re.S)
s=""
i=0
for items in myItems:
x=items.replace('<br/>','\n')
i=i+1
s=s+'\n第%d条:' % i + x
return s
def Start(self):
page=self.page
try:
mypage=self.GetPage(str(page))
except:
print u'无法链接糗事百科'
return mypage
#-----主程序入口处------
print u'加载http://www.qiushibaike.com 前2页的段子'
try:
myfile=open('./1.txt','w')
for x in range(1,3):
print u'正在加载第%d页......' % x
myModel = Spider_Model(x)
s=myModel.Start()
myfile.write('\n\n=============糗事百科第%d页=============\n' % x + s)
myfile.close()
print u'加载完毕!'
raw_input(u'按任意键退出...');
except:
print u'加载失败!'
补充:python没有大括号分块,因此对缩进有严格的要求,注意[Tab]和[space]虽然都可以用单个前者代替几个后者,但是在编译时是不一样的,如果你编辑器中对齐了还是有错!要注意一下是不是这两个键混用时不对。另为向文件中输入中文字符时要注意编码,在代码前加上如下代码,否则会有乱码
import sys
reload(sys)
sys.setdefaultencoding("utf-8")