简单的爬虫知识
#_*_ coding:utf-8 _*_ import urllib2 import re class Spider: def __init__(self): self.page=1 # 当前应该爬第几页 self.enable=True # 是否继续加载页面 ''' 内涵段子吧 的一个 爬虫类 ''' def load_page(self,page): ''' @brief 定义一个url请求网页的方法 @param page 需要请求第几页 @returns 返回的页面html ''' url="http://www.neihan8.com/article/list_5_"+str(page)+".html" user_agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" header={"User-Agent":user_agent} req=urllib2.Request(url,headers=header) response=urllib2.urlopen(req) html=response.read() # 把获取到的网页的编码转换成utf-8,具体的网页编码根据网页自身来,这里是gbk所以,是gbk gbk_html=html.decode('gbk').encode('utf-8') # < div class ="f18 mb20" > # 用正则表达式将gbk_html过滤,注意,用单引号,里面用双引号,因为网页用的是双引号 # re.S 如果没有re.S 则是只匹配一行有没有符合规则的字符串,如果没有则下一行重新匹配 # 如果加上re.S 则是将所有的字符串将一个整体进行匹配 pattern=re.compile(r'<div.*?class="f18 mb20">(.*?)</div>', re.S) item_list=pattern.findall(gbk_html) return item_list def deal_one_page(self,item_list,page): ''' 处理每一页的数据 ''' print "******* 第 %d 页 爬取完毕...*******" % page for item in item_list: # print "====================" items= item.replace("<p>", "").replace("</p>", "").replace("<br />", "") self.write_to_file(items) #写入到txt中 def write_to_file(self,txt): f=open("./mystroy.txt",'a') #追加形式打开文件 f.write(txt) f.write("==============================") f.close() def do_work(self): ''' 让爬虫能够根据我们的意愿进行循环爬取工作 ''' while self.enable: try: item_list=self.load_page(self.page) except urllib2.URLError as e: print e.reason continue self.deal_one_page(item_list, self.page) self.page += 1 print "按回车继续..." print "输入quit 退出" command = raw_input() if (command == "quit"): self.enable = False break if __name__=="__main__": Spider().do_work()
作者:魔女小溪
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.