• 网络爬虫


    1、网络爬虫(网络蜘蛛,网络机器人)

      1、定义:抓取网络数据的程序

      2、用Python程序模仿人点击浏览器访问网站

      3、目的:获取大量数据进行分析

    2、企业获取数据的方式

      1、公司自有的数据

      2、第三方数据平台购买

      3、爬虫爬取数据:市场上没有,或者价格太高

    3、Python做爬虫优势

      请求模块,解析模块丰富成熟,强大的Scrapy爬虫框架

      请求网站后返回的是网站的全部代码,而解析模块可以网页进行分析获取我们想要数据

      PHP:对多线程,异步支持不太好

      JAVA:代码笨重,代码量大

      C/C++:虽然效率高,但是代码成型慢

    4、爬虫分类

      1、通用网络爬虫(搜索引擎引用,需要遵循robots协议)

      比如:谷歌,百度网站 

      robots协议:网站通过Robots协议告诉搜索引擎那些页面可以抓,那些页面不可以抓

      说明:

         每一个网站都有robots协议,有百度快照字样就是百度爬取的网站

      2、搜索引擎如何获取一个新网站的URL呢

        1、网站主动向搜索引擎提供(百度站长平台)

        2、DNS服务器(万网),快速收录网站

      3、聚焦网络爬虫

        自己写的爬虫程序:面向主题爬虫,面向需求爬虫

    5、爬取数据步骤

      1、确定需要爬取的URL地址

      2、通过HTTPS/http协议获取相应HTML页面

      3、解析相应

        1、所需数据,保存

        2、页面中新的URL,继续第二步

    6、web

      1、URL:

        scheme://host[:port]/path/..../[?query-string][#anchor]

        协议    域名  端口 资源路径  查询参数  锚点

        https://www.cnblogs.com/followlqc/p/11059943.html    (前端页面源码带#的是锚点)

        https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=request_25_pg&wd=URL%208&oq=URL&rsv_pq=af88360f000634cf&rsv_t=b435hopykhl%2BknVEBM3T%2Fhq4GWhwmViQ7dmPg6TTbxbFQ8M6NOK%2BdBCzuL%2B2agWX5Ypk0Q&rqlang=cn&rsv_enter=1&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1930&rsv_sug4=2357

        多个查询参数之间用&做分隔

        锚点跳到网页指定位置

    7、请求头(Request Headers)

         #接受数据类型

      #是否支持压缩,解压缩

      #支持的语言

      #缓冲控制

      >0直接从浏览器缓存中提取

      <0向浏览器请求确认,该资源是否修改

      #支持长连接

      #服务器可能检查

      #升级https

      #浏览器信息

    8、get请求和post请求

      1、GET:查询参数在URL上面显示出来

      2、POST:FORM表单提交,传输大文件,数据隐藏能赶在form表单中,不会再URL中显示

    9、爬虫请求模块(urllib.requsest)

      常用方法:

        1、urllib.request.urlopen('URL地址')

          作用:向网站发起请求并获取响应对象

          2、重构user-Agent

            1、不支持重构:User-Agent:urlopen

            2、支持重构:User-Agent:urllib.request.Request

        2、urllib.requqest.Request('URL',header={})

         使用流程

           1、创建请求对象

           

           2、发请求获取相应对象

           3、获取响应内容

         3、获取响应对象的方法response

            1、read()

            2、getcode():返回http响应码

              200:成功

              302:临时转移至新url

              404:页面未找到

              500:服务器异常

            3、geturl()

              1、返回实际数据的url

    6、编码模块(urllib.parse)

      1、urllib.parse.urlemcode({})

      写程序:输入你要搜索的内容

      保存到本地.....html..

    import urllib.request
    import urllib.parse
    #首先拼接一个url
    key=input('输入你需要搜索的内容')
    baseurl = 'https://www.baidu.com/s?'
    
    wd = {'wd':key}
    key = urllib.parse.urlencode(wd)
    
    url = baseurl + key
    
    headers = {'User-Agent':'ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
    
    req = urllib.request.Request(url,headers=headers)
    
    res = urllib.request.urlopen(req)
    
    html = res.read().decode('utf-8')
    
    with open('suosou.html','w',encoding='utf-8') as f:
        f.write(html)
    print('搜索结束')
    

      

    7、案例:百度贴吧数据抓取

        1、要求

          1、输入抓取的贴吧名称

          2、起始页

          3、终止页

          4、保存到本地:第一页HTML,第二页HTML。。。。

        2、步骤

          1、找url规律,拼接url

          2、第一页:http://

          3、获取页面内容(发请求获取响应)

          4、保存(本地,数据库)

                  

      

    import urllib.request
    import urllib.parse
    import random
    import time
    
    #首先拼接一个url
    header_list=[{"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},
                 {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},
                {"User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)"}
                 ]
    headers=random.choice(header_list)
    
    #主程序
    name = input("请输入贴吧名")
    begin = int(input("输入起始页"))
    end = int(input("请输入终止页"))
    
    kw={'kw':name}
    kw=urllib.parse.urlencode(kw)
    
    for i in range(begin,end+1):
        pn=(i-1)*50
        url = 'http://tieba.baidu.com/f?'+kw+'&pn='+str(pn)
        print("正在爬取第%d页" % i)
        #发送请求
        req = urllib.request.Request(url,headers=headers)
        res = urllib.request.urlopen(req)
        time.sleep(3)
        html = res.read().decode('utf-8')
    
        #写入文件
        filename=name + '第'+str(i)+'页.html'
        with open(filename,'w',encoding='utf-8') as f:
    
            f.write(html)
            print("已经爬取完第%d页"%i)
            print('*'*15)
    print('爬取结束')
    

      

  • 相关阅读:
    JdbcTemplate增删改查案例
    顾问和注解
    使用多种方式实现AOP
    面试题
    Spring Bean的生命周期和作用域
    IOC和AOP交互拓展(二)
    AOP
    错题
    Spring核心概念
    hadoop-MapReduce框架原理之OutputFormat数据输出
  • 原文地址:https://www.cnblogs.com/followlqc/p/11078688.html
Copyright © 2020-2023  润新知