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环境下使用
  • 相关阅读:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    php使用 _before_index() 来实现访问页面前,判断登录
    php使用 _before_index() 来实现访问页面前,判断登录
    查询方式实例演示
    查询方式实例演示
    haproxy timeout server 46000 后台超时时间
    haproxy timeout server 46000 后台超时时间
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
  • 原文地址:https://www.cnblogs.com/angelgril/p/7516050.html
Copyright © 2011-2022 走看看