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

      

      什么是爬虫?

        通过编写程序模拟浏览器让其去互联网上获取数据

      爬虫的分类:

        1. 通用爬虫:爬取的是一整张网页源码数据

        2.聚集爬虫:爬取网页中局部的内容,聚集是建立在通用爬虫之上

        3.增量式爬虫:用来检测网站数据更新情况,从而爬取到网站找中最新出来的数据。

      反爬机制:对应的载体是门户网站,网站中可以指定相关的机制防止爬虫程序对其网站数据爬取

      反反爬机制:对应的载体是爬虫程序,爬虫程序可以破解网站采取的反爬机制,从而使得爬虫可以获取数据。

      第一个反爬机制:robots.txt协议

         -User-Agent: 请求载体的身份标识

         特征:文本协议,防君子不防小人

    requests模块

      环境的安装: pip install requests

        作用:用于模拟浏览器发起网络请求

      requests的编码流程:

        1.指定url

        2.发起请求

        3.获取响应数据

        4.持久化存储

      参数动态化:get(params)

      UA 伪装:get(headers)

        UA检测被应用到了绝大数网站中。

      动态加载的数据:

        - 是由另一个单独的请求请求到的数据

        - 特性:可见非可得

      -如何鉴定一个网站中的相关数据是否为动态加载的数据

        -使用抓包工具做局部搜索

          -可以搜到就不是动态加载的,否则就不是

      -如何鉴定出数据为动态加载,如何捕获动态加载的数据?

        -在抓包工具中做全局搜索,从定位到的数据包中提取url请求参数,对其进行请求发送即可

    数据解析:

      -正则表达式

      -bs4

      -xpath

    -数据解析的通用原理

      - 概念:将爬取到的网页源码中指定的内容进行提取

      - 作用:用来实现聚焦爬虫(将页面中局部数据进行提取)

      -原理:

        -页面中数据是 存储在哪里的

          -存在于某个标签之中

          -存在于标签的属性中

        - 1.定位标签

        - 2. 数据的提取

    - 正则表达式实现的数据解析

      - 定位标签

      - 数据的提取

    - bs4解析

      -解析原理

        - 1. 实例化一个BeautifulSoup的对象,然后把即将被解析的页码数据加载到该对象中

        - 2. 调用该对象中相关的方法和属性实现标签定位和数据提取

      -BeautifulSoup对象实例化

        - BeautifulSoup(fp,'lxml')   :将本地存储的html文档中的数据进行解析

        -BeautifulSoup(page_text,'lxml')  :将互联网请求到的页面源码进行解析

          -lxml:一种解析器

      -环境安装

        pip install bs4

        pip install lxml

      - 标签定位

        - soup.tagName :定位到第一次出现的tagName

        -  属性定位find('tagName',attrName='value') find 只能定位符合要求的第一个标签

          - find_all()

        -  select(选择器): id,class,tag,层级选择器 一个大于号表示一个层级 空格表示多个层级

      - 取值

        - text :获取的是标签下面所有的文本内容 也包含其子标签下面的所有内容

        - string :获取标签的直系内容

      - 取属性值

        - tag['attrName']

          a_tag = soup.find('a',id="feng")

          print(a_tag['href'])

    - xpath解析原理:

      - 1. 实例化一个etree类型的对象,吧即将被解析的页面源码数据加载到该对象中

      - 2. 调用该对象中的xpath方法结合着不同形式的xpath表达式进行标签定位和数据提取

      

      -etree对象实例化

        - etree.parse(filePath)

        - etree.HTML(page_text)

      - 环境的安装:

        pip install lxml

      - html 标签是满足树状结构的

        - 标签的定位

          最左侧的 / :表示xpath表达式必须从跟节点进行标签定位

          非最左侧斜杠表示一个层级

          最左侧是// : 表示从任意位置进行标签定位

          非最左侧// : 表示横跨多个层级
          tree = etree.parse('./test.html')
          print(tree.xpath('/html/head/title'))

        - 属性定位 //tag[@attrName="value]
          print(tree.xpath('//div[@class="song"]'))
      
        - 索引定位 从1开始
          tree.xpath('//div[@class="tang"]/ul/li[3]'

       - 取文本值:

        - /text() 取某个标签下的直系标签的值

        - //text() 取某个标签下所有的值

          print(tree.xpath('//p[1]/text()'))

          print(tree.xpath('//div[@class="tang"]//text()'))

       - 取属性

         print(tree.xpath('//a[@id="feng"]/@href'))

    - xpath 表达式的管道符作用

      -- 提升通用性

    We are down, but not beaten. tested but not defeated.
  • 相关阅读:
    算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值
    算法Sedgewick第四版-第1章基础-013一用stack实现自动补全表达式括号
    算法Sedgewick第四版-第1章基础-012一用stack实现输出一个数的二进制形式
    算法Sedgewick第四版-第1章基础-011一用链表实现bag、queue、stack
    算法Sedgewick第四版-第1章基础-010一检查括号是否成对出现
    算法Sedgewick第四版-第1章基础-009一链表与数组的比较及其他数据结构
    算法Sedgewick第四版-第1章基础-008一用数组实现栈(泛型、可变大小)
    算法Sedgewick第四版-第1章基础-007一用两个栈实现简单的编译器
    webApi2 上传大文件代码
    IE8 AJAX 不能正常工作 解决办法
  • 原文地址:https://www.cnblogs.com/guniang/p/11573828.html
Copyright © 2011-2022 走看看