• 简单的爬虫知识


    #_*_ 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环境下使用
  • 相关阅读:
    Linux02--文件系统与磁盘管理
    Android02-Activity01
    Android01-概述
    LeetCode | Binary Tree Level Order Traversal II
    LeetCode | Binary Tree Level Order Traversal
    LeetCode | Binary Tree Postorder Traversal
    LeetCode | Binary Tree Inorder Traversal
    LeetCode | Binary Tree Preorder Traversal
    LeetCode | Symmetric Tree
    LeetCode | Balanced Binary Tree
  • 原文地址:https://www.cnblogs.com/angelgril/p/7516050.html
Copyright © 2020-2023  润新知