爬虫学习笔记
Published in:2020-06-09 |

爬虫学习笔记

请求与响应

爬虫学习笔记

请求与响应

爬虫:crawler、网络机器人、网络蚂蚁、网络蜘蛛、spider

  1.  1. 通用爬虫
        主要用于搜索引擎,谷歌、百度、360、搜狗、必应等等.....
        目的在于尽可能多的搜集互联网上的高质量数据
        优点:数量大且全
        缺点:有价值的数据比较少,硬件成本太高。pagerank
     2. 聚焦爬虫:
        也成为主题爬虫(最常用的爬虫)
        要按照预先设定好的主题,有选择性的进行网页爬取。
        主要用于特定信息的获取。
        优点:节省资源,数据价值较高。
     3. 增量式爬虫
        是一种特殊的聚焦爬虫,只采集更新后的数据
        每次爬取只爬取更新后的页面(一天、一周、一月)
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	
    2. ## 协定约束

    在首页/IP后面加上/robots.txt可以看到君子协定。

    3. ## 库

    ```markdown
    1. urllib 最基础的,python自带的一个http请求库
    2. requests 基于urllib进行了封装,是一个第三方库 pip install requests
    3. scrapy 协程级的异步框架4. scrapy-redis 基于scrapy和redis出现的分布式爬虫框架
    5. aiohttp......
  2. HTTP的主要请求

    1
    2
    3
    4
    5
    6
    1.  GET请求:向服务器请求资源
    get请求可以携带参数,参数携带方式以在url后面以问号拼接的形式携带
    2. POST请求:向服务器请求资源
    1. post请求可以携带参数,通过表单提交,post的请求的参数一般是加密的。
    3. PUT请求:请求服务器存储一个资源
    4. DELETE请求:请求服务器删除一个资源。
  3. 爬虫程序思路

    1.  1. 发送get请求
          res = requests.get()
          res.text
          如果出现乱码,查找网页中的网页编码方式,进行解码在编码
          res.content.decode()
       2. 如何解析响应
          1. 正则
          2. BS
          3. lxml
             第三方类库,效率快,可以解析html和xml
             pip install lxml
             pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml
             如何更新pip
             pip install --upgrade pip
             可以使用xpath语法来获取数据
             
             1. 基本语法:
                //:从根目录开始获取
                @属性名:获取属性值
                /表示从当前对象开始获取
                []:筛选元素
             2. 内置函数
                text()
       
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28

      ### 案例

      ```python
      import requests
      from lxml import etree
      url = 'http://www.xbiquge.la/xiaoshuodaquan/'
      res = requests.get(url=url)
      ele = etree.HTML(res.text)
      bookurl = ele.xpath("//div[@class='novellist']/ul/li/a/@href")
      for url in bookurl:
      res = requests.get(url=url)
      txt = res.content.decode('utf-8')
      ele = etree.HTML(txt)
      content_url = ele.xpath("//div[@id='list']/dl/dd/a/@href")
      for u in content_url:
      res = requests.get(url = 'http://www.xbiquge.la'+u)
      # pycharm的输出有长度限制,实际上正文已经获取到了,但是pycharm不显示
      content = res.content.decode('utf-8')
      ele = etree.HTML(content)
      c = ele.xpath("//div[@id='content']/text()")
      print(c)
      s = ''
      for cc in c:
      s+= cc
      s = s.strip()
      with open('牧神记.txt','a+',encoding='utf-8') as w:
      w.write(s+'\n'+'\n'+'\n')
Prev:
软件需求工程---数据流图
Next:
python 实现冒泡排序和选择排序