• 爬虫基础


    基本架构:调度器,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

  • 相关阅读:
    mysql无法启动-You may have to recover from a backup
    mysql导出索引sql 导出索引创建语句
    Padavan路由器设置桥接多路由器同WIFI方法
    挖的坑还是要填的
    I'm Back
    40行加速头文件
    一些XJOI博客的密码
    p进制线性基填坑
    Dirichelet卷积的k次方根
    用pb_ds写一颗线段树
  • 原文地址:https://www.cnblogs.com/HJhj/p/7274137.html
Copyright © 2020-2023  润新知