zoukankan      html  css  js  c++  java
  • 简单的爬虫知识

    #_*_ 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环境下使用
  • 相关阅读:
    Excel中的Vlookup函数用法
    C# WinForm 在窗口菜单上显示已打开窗体的标题及其窗体的排列
    C#使用Windows注册表编辑
    World Creater
    AtService.exe 占用CPU资源较高的解决办法
    几段SQL Server语句和存储过程(转载)
    代码转换工具
    ReSharper 4.5 Feature Map
    DXperienceXaf9.2.6 Personal Computer SN
    RegexBuddy v3.1.1 破解版
  • 原文地址:https://www.cnblogs.com/angelgril/p/7516050.html
Copyright © 2011-2022 走看看