zoukankan      html  css  js  c++  java
  • 爬虫基础

    基本架构:调度器,url管理器,网页下载器,网页解析器

    调度器:启动爬虫,关闭爬虫,监视爬虫的进度

    url管理器:管理待爬取的URL和已爬取的URL

        需要支持:添加新URL到待爬取集合

             判断待添加URL是否已经被爬取

             获取待爬取URL,判断是否还有带爬取的URL

             被爬取之后将该URL从待爬取集合移动到已爬取集合

        实现方式:存储在内存中,使用set数据结构

             存储在关系数据库

             存储在缓存数据库中

    网页下载器:对URL管理器中待爬取的URL指定的网页以html形式下载到本地,存储成字符串

          urllib2:Python官方基础模块

          下载网页方法:response=urllib2.urlopen(url),使用response.getcode()方法获取状态码,是200则表示下载成功;response.read()方法读取下载内容

                 使用request类,将url,data,header传入request类,调用urllib2.urlopen(request)

    import urllib2
    
    request=urllib2.Request(url)
    #向服务器提交数据
    request.add_data('a','1')  
    #将爬虫伪装成一个mozilla浏览器
    request.add_header('User-Agent','Mozilla/5.0')  
    response = urllib2.urlopen(request)

                 

    添加特殊情景处理器   

             

    import urlib2,cookielib
    
    #创建cookie容器
    cj = cookielib.CookieJar()
    
    #创建一个opener
    opener = urlib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    
    #给urlib2安装opener
    uelib2.install_opener(opener)
    
    #使用带有cookie的urllib2访问网页
    response = urlibopen("http://www.baidu.com/")

    网页解析器:对于网页下载器所产生的字符串进行解析,解析出价值数据与新的URL,添加进URL管理器

          使用正则表达式:字符串的模糊匹配,其余三种为结构化解析

          html.parser

          BeautifulSoup

     创建beautifulsoup对象:

    from bs4 import BeautifulSoup
    
    
    #根据html网页字符串创建beautifulsoup对象
    soup = beautiful(html_doc,            #html文档字符串
                     'html.parser'        #html解析器
                     from_encoding='utf8' #html文档编码
                     )                    

    搜索结点:

    #查找所有标签为a的结点
    soup.find_all('a')
    
    #查找所有标签为a,链接符合/view/123.htm形式的节点
    soup.find_all('a',href='/view/123.htm')
    
    #查找所有标签为a,链接符合/view/数字.htm形式的节点
    soup.find_all('a',href=re.compile(r'/view/d+.htm'))
    
    
    #查找所有标签为div,class为abc,文字为Python的节点
    soup.find_all('div',class_='abc',string='Python')

    访问节点信息:

    #得到节点<a href='1.html'>Python</a>
    
    #获取查找到的节点的标签名称
    node.name
    
    #获取查找到的a节点的href属性
    node['href']
    
    
    #获取查找到的a节点的链接文字
    node。get_text()

          lxml

  • 相关阅读:
    基于散列的集合 HashSetHashMapHashTable
    英文工作邮件
    英语日常口语
    统计数组中各个元素出现的次数,元素取值范围为:1到N
    编写一个程序,指定一个文件夹,能自动计算出其总容量
    四则运算随机生成100题
    常用异常处理情况
    第三讲 动手动脑-2
    第三讲 动手动脑-1
    使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象
  • 原文地址:https://www.cnblogs.com/HJhj/p/7274137.html
Copyright © 2011-2022 走看看