简单的爬虫知识

#_*_ 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()
python2环境下使用
原文地址:https://www.cnblogs.com/angelgril/p/7516050.html