day01python爬虫

一、课程形式;
(1)爬虫阶段:项目非常多。基本上每天都有3-4个项目。最重要的就是项目经验。
(2)笔记形式:在word文档上:每个项目分析截图放到上面。
(3)作业:每天都会留作业:以爬虫项目为主。(笔记)
    提交形式:以邮件形式发送:发送给王宾老师和我。
二、爬虫
(一)数据的由来
    数据如果想要发挥它的作用,必须要分析。
    爬虫最重要的作用就是获取数据。
(二)、爬虫的定义
    (1)定义:爬虫就是自动抓取互联网信息的脚本或者程序。
    (2)爬虫可以解决的问题。
        a、解决冷启动问题。
        b、搜索引擎的根基:做搜索引擎少不了爬虫。
        c、建立知识图谱,帮助建立机器学习知识图谱。
    jquery是什么?
        document.gete
        选择器可以快速写代码。---使得js编程更加简单。
    建议:大家找本书去读一读。因为做网页和爬虫js都非常重要。
    (3)爬虫工程师的进阶之路
            初级爬虫工程师
            1.web 前端的知识: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
            2、正则表达式, 能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
            3、会使用 XPath 等获取一些DOM 结构中的节点信息;
            4、知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
            5、能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
            中级爬虫工程师:
            1、了解什么事HASH,会简单地使用MD5,SHA1等算法对数据进行HASH一遍存储
            2、熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等。
            3、能设置user-agent进行数据爬取,设置代理等。
            4、知道什么事Request,什么事response,会使用Fiddler等工具抓取及分析简单地网络数据包;对于动态爬虫,要学会分析ajax请求,模拟制造post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
            5、对于一些难搞定的网站学会使用phantomjs+selenium抓取一些动态网页信息
            6、并发下载,通过并行下载加速数据爬取;多线程的使用。
            高级爬虫工程师:
            1、能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
            2、能使用数据挖掘技术,分类算法等避免死链。
            3、会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
            4、能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。
(三)爬虫的分类
    爬虫可以分为通用爬虫和聚焦爬虫。
    1、通用爬虫:就是将互联网上的数据整体爬取下来保存到本地的一个爬虫程序,是搜索引擎的重要组成部分。
     (1)搜索引擎:就是运用特定的算法和策略,从互联网上获取页面信息,并将信息保存到本地为用户提供检索服务的系统。
     (2)搜索引擎的工作步骤:
        第一步:抓取网页
            涉及到一个问题,如果获取页面的Url,使得搜索引擎涉及到所有的网页。--->搜索引擎的url获取途径都哪些?
            a、新网站会主动提交。
            b、在其他网站设置的外链也会加入到待爬取的url队列里面。
            c、和dns服务商合作,如果有新网站成立,搜索引擎就会获取网址。
        第二步:数据存储
        第三步:预处理
            提取文字
            中文分词
            消除噪音(比如版权声明文字、导航条、广告等……)
            除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如 PDF、Word、WPS、XLS、PPT、TXT 文件等。我们在搜索结果中也经常会看到这些文件类型。
        第四步:提供检索服务,网站排名
     (3)搜索引擎的局限性。
            1.通用搜索引擎所返回的结果都是网页,而大多情况下,网页里90%的内容对用户来说都是无用的。
            2.不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
            3.万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
            4.通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
  2、聚焦爬虫:在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
  3、爬虫的准备工作。
    (1)robots协议(重点)
        定义:网络爬虫排除标准
        作用:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
        将来写爬虫程序我们要规避robots协议即可。
    (2)网站地图sitemap
         sitemap 就是网站地图, 它通过可视化的形式, 展示网站的主要结构。
         网上有很多sitemap生成网站:https://help.bj.cn/
    (3)估算网站的大小
        可以使用搜索引擎来做,比如在百度中使用site:www.zhihu.com
(四)http协议(重点)
    1、http协议:HyperText Transfer Protocol,超文本传输协议
        作用:是一种收发html的【规范】。
    2、http端口号:80
       https端口号:443
        HTTPS (Hypertext Transfer Protocol over Secure Socket Layer)简单讲是http的安全版,在http下加入SSL层。
        SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。
        数字签证。(也要去在复习复习)。
    3、http协议的特点(重点):
        (1)应用层协议。(最顶层也是和用户交互的层。)
        (2)无连接:http协议每次发送请求都是独立的。http 1.1以后有一个头:connection:keep_alive.
        (3)无状态:http协议不记录状态,进而产生了两种记录http状态的技术:cookie和session。
    4、url:统一资源定位符。
        (1)url的作用:用来定位互联网上的【任意】资源的【位置】。
        (2)url的组成:
            https://www.baidu.com/s?wd=python&rsv_spt=1
            https://www.baidu.com/index.html
            协议:https/http
            netloc(网络地址):ip:port
                ip主要用来定位电脑(网卡)。
                port主要用来定位应用。mysql(3306),mongo(27017)----相当于一个门户。
            path:资源在服务器的相对路径。---路由(router)
        (3)url中的特殊符号。
            ?:get请求的参数在?后面
            &:get请求的多个参数用&连接
            #:锚点,定位到页面中任意位置。
        (4)python中用来解析url的模块。
            from urllib import parse
            url = 'https://ww.baidu.com:8888/index.html?username=222&password=123#abc'
            result = parse.urlparse(url)
            print(result)
            '''
            ParseResult(
                scheme='https', 
                netloc='ww.baidu.com:8888',
                path='/index.html', 
                params='', 
                query='username=222&password=123', 
                fragment='abc')
            '''
            print(result.scheme)
            print(result.netloc)
        
            
    5、http工作过程:(重点)
        (1)地址解析
        (2)封装HTTP请求数据包
        (3)封装成TCP包,建立TCP连接(TCP的三次握手)
        ***(4)客户机发送请求命令***
        ***(5)服务器响应***
        (6)服务器关闭TCP连接
    6、客户端请求(重要)
        (1)组成:请求行、请求头部、空行、请求数据(实体)四个部分组成
                请求行:协议,url,请求方法
                请求头:主要的作用就是来限定这个请求的详细信息。(非常重要,必须要知道一些重要的请求头的含义。)
                请求数据:post请求的数据是放到这里面的。
        (2)重要请求头(针对于爬虫而言)
            user-agent:客户端标识
            cookie:请求的状态信息,很重要
            Referer:表示产生请求的网页来源于哪里。
                防盗链。
            accept:允许传入的文件类型。
                Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3。
            x-requested-with:ajax请求必须要封装的头
            --------------------------
            content-type:post请求的数据类型
            content-length:post请求数据的长度
            
        (3)请求方法:get/post/put(推送)/delete(删除)/trace(诊断)/options(性能)/connect(连接,预留字段)。
            get方法:get获取--从服务器获取资源--条件(请求参数)---请求参数是拼接到url里面的?后面--不安全(容易被别人获取:用户名和密码)---大小受限。
            post方法:post传递--向服务器传递数据--请求数据是放在实体里面。----安全---大小不受限
            记忆知识,千万不要被--理解记忆。
    7、服务器响应(重要)
        (1)组成: 
                状态行:状态码
                消息报头:
                空行
                响应正文
        
        (2)响应头
            Content-Type: text/html;charset=utf-8:响应的类型
        (3)状态码(状态码)(重要)
            100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
            200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。    300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
            400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服 务器拒绝访问,权限不够---DDos)。
            500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。
    8、当我们在客户端输入一个url,客户端是如何请求加载出整个页面的?(重点)
        (1)客户端解析url,封装数据包,发送请求给服务器。
        (2)服务器从请求中解析出客户端想要内容,比如index.html,就把该页面封装成响应数据包,发送给客户端。
        (3)客户端检查该inde.html中是否有静态资源需要继续请求,比如js,css,图片,如果有继续请求获取静态资源。
        (4)客户端按照html的语法结合静态资源将页面完美的显示出来。
三、requests模块(重点)
(一)requests模块简介
    Urllib和requests模块是发起http请求最常见的模块。
    安装:pip install reqeusts
(二)requests模块的get方法
        1、response = requests.get(
            url=请求url地址,
            headers = 请求头字典,
            params=请求参数字典,
        )
        2、response对象
            (1)响应正文:
                a、字符串格式的响应正文:response.text
                b、字节类型(bytes)的响应正文:response.content
            (2)响应正文的乱码问题解决:
                response.content.decode('页面的正确编码')
        
2、案例:百度产品页面下载
问题:下载好的页面打开之后,相比较原来的页面没有图标,为什么?
作业:整理笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值