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.
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/guniang/p/11573828.html
Copyright © 2011-2022 走看看