• 爬虫基础之一


    一、爬虫的基本原理

    1.百度是个大爬虫.
    2.模拟浏览器发送http请求--(请求库)(频率,cookie,浏览器头。js反扒,app逆向)(抓包工具)--->从服务器取回数据---->
    解析数据--(解析库)(反扒)--->入库(存储库,)
    3.爬虫协议(详情见网站:https://www.cnblogs.com/sddai/p/6820415.html)
      Robots协议也称为爬虫协议、爬虫规则、机器人协议,是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。
      “规则”中将搜索引擎抓取网站内容的范围做了约定,包括网站是否希望被搜索引擎抓取,哪些内容不允许被抓取,而网络爬虫可以据此自动抓取或者不抓取该网页内容。
      如果将网站视为酒店里的一个房间,robots.txt就是主人在房间门口悬挂的“请勿打扰”或“欢迎打扫”的提示牌。这个文件告诉来访的搜索引擎哪些房间可以进入和参观,
      哪些不对搜索引擎开放。

    二、requests模块

    1.urllib 内置库,发送http请求,比较难用,requests是基于这个库的写的
    2.requests,应用非常广泛的请求库
    3.request-html库(request,bs4,lxml等二次封装)
    4.Usr-Agent:请求头中标志是什么客户端发送的请求
    5.Regerer:上次请求的地址

    2.1 发送 get请求

    1. 发起请求
      使用http库向目标站点发送请求,即发送一个Request
      Request包含 :请求头、请求体等
    2. 获取响应内容
      如果服务器能正常响应,则会得到一个Response
      Response包含:html,json,图片,视频等
    3. 解析内容
      解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
      解析json数据:json模块
      解析二进制数据:以b的方式写入文件
    4. 保存数据
      数据库
      文件

    三、请求与响应

    http协议:http://www.cnblogs.com/linhaifeng/articles/8243379.html
    Request:用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)
    Response:服务器接收请求,分析用户发送来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)

    ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。



    四、Request

    1 请求方式
      常用的请求方式:GET,POST
      其他请求方式:HEAD,PUT,DELETE,OPTHONS
      
      ps:用浏览器演示get与post的区别,(用登录演示post)


      post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyyy&k3=zzz
      post请求的参数放在请求体内:
        可用浏览器查看,存放于form data内
      get请求的参数直接放在url后



    2 请求url
      url全称统一资源定位符,如一个网页文档,一张图片
      一个视频等都可以用url唯一来确定


      url编码
      https://www.baidu.com/s?wd=图片
      图片会被编码(看示例代码)




      网页的加载过程是:
      加载一个网页。通常都是先加载document文档,
      在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求

    3 请求头
      User-agent:请求头中如果没有user-agent客户端配置
      服务端可能将你当做一个非法用户
      host
      cookies:cookie用来保存登录信息
      一般做爬虫都会加上一个请求头



    4 请求体
        如果是get方式,请求体没有内容
        如果是post方式,请求体是format data
    
        ps:
        1、登录窗口,文件上传等,信息都会被附加到请求体内
        2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post 




    五、响应对象方法

    import requests
    respone=requests.get('https://www.autohome.com.cn/shanghai/')
    # respone属性
    # print(respone.text)  # 文本内容
    # print(respone.content)  # 二进制
    
    # print(respone.status_code) # 状态码
    # print(respone.headers)    # 响应头
    # print(type(respone.cookies) )   # cookie对象  RequestsCookieJar
    from requests.cookies import RequestsCookieJar
    # print(respone.cookies.get_dict()) # cookie对象转成字典
    # print(respone.cookies.items())
    
    
    
    # print(respone.url)    # 请求地址
    # print(respone.history) # 当你访问一个网站,有30x,重定向之前的地址,
    
    print(respone.encoding) # 网站编码
    
    # respone.encoding='gb2312'
    # print(respone.text)
    #
    # #关闭:response.close()
    # from contextlib import closing
    # with closing(requests.get('xxx',stream=True)) as response:
    #     for line in response.iter_content():
    #     pass
    
    ## 解析json
    
    
    # import json
    # json.loads(respone.text)
    # respone.json()
  • 相关阅读:
    mysql 语句case when
    Hibernate应用SQL查询返回实体类型
    JavaBean 和 Map 之间互相转换
    基于注解风格的Spring-MVC的拦截器
    Spring MVC与表单日期提交的问题
    自适应网页设计(Responsive Web Design)
    JSP页面用EL表达式 输出date格式
    EL表达式中如何截取字符串
    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义
    javascript对table的添加,删除行的操作
  • 原文地址:https://www.cnblogs.com/ltyc/p/14298908.html
Copyright © 2020-2023  润新知