爬虫理论及思路

目录

一、爬虫的基本概念

 什么是爬虫?

二、爬虫的分类   

1. 通用网络爬虫:搜索引擎的爬虫(大而全)   

2. 聚焦网络爬虫:针对特定网页的爬虫(小而精)       

3. 增量式网络爬虫(只采集更新后的内容),只需要调用时间模块

三、Robots协议

四、爬虫的基本流程

Request 中包含什么:

Response中包含什么:

   数据保存:

  • 1、理解爬虫的基本概念
     
  •  2、掌握爬虫的基本流程
     
  • 3、Request 和 Response的使用
     
  • 4、怎么抓取数据
     
  • 5、怎么解析数据
     
  • 6、怎么保存数据

一、爬虫的基本概念

 什么是爬虫?

  •         请求网站提取数据的自动化程序
  • 请求:就是向网站发起请求,得到网站许可
     
  • 提取:提取数据(图片、文字、视频等)
     
  • 自动化:就是通过代码实现自动化提取大量数据

二、爬虫的分类   

  • 通用网络爬虫
     
  • 聚焦网络爬虫
     
  • 增量式网络爬虫

1. 通用网络爬虫:搜索引擎的爬虫(大而全)   

       比如用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关的再根据一定的排名规则进行排序后展现给用户,那么就需要尽可能多的互联网的优质网页。

      从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。

2. 聚焦网络爬虫:针对特定网页的爬虫(小而精)       

      也叫主题网络爬虫,爬取的 目标网页定位在与主题相关的页面中 ,主要为某一类特定的人群提供服务,可以节省大量的服务器资源和带宽资源。聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

      比如要获取某一垂直领域的数据或有明确的检索需求,此时需要过滤掉一些无用的信息。

例如:那些比较价格的网站,就是爬取的其他网站的商品。

3. 增量式网络爬虫(只采集更新后的内容),只需要调用时间模块

       增量式网络爬虫(Incremental Web Crawler),所谓增量式,即增量式更新。增量式更新指的是再更新的时候只更新改变的地方,而为改变的地方则不更新,所以该爬虫只爬取内容发生变化的网页或者新产生的网页。比如:招聘网爬虫

三、Robots协议

什么是Robots协议?

  •         - Robots协议的全称是‘网络爬虫排除标准’ ,简称为Robots协议
     
  •         - Robots协议的一个重要作用就是告知爬虫那些页面可以爬取, 那些不可以
     
  •         - 实际上是一个君子协议;

四、爬虫的基本流程

  •         - 发起请求:通过http库向目标站点发起请求,即发送一个request,请求可以包含额外的headers等信息,等待服务器响应。
     
  •         - 获取响应内容:如果服务器能正常响应,会得到一个response,响应的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
     
  •         - 解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析,可能是json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
     
  •         - 保存数据:保存形式多种多样,可以保存为文本,也可以保存至数据库或者特定格式的文件。

Request 中包含什么:

  •         - 请求方式:爬虫主要是 get 和 post
     
  •         - 请求url:网址中有哪些东西
     
  •         - 请求头:请求中头部信息
     
  •         - 请求体:post 请求方式(唯一的)

Response中包含什么:

  •         - 响应状态
     
  •         - 响应头
     
  •         - 响应体:爬虫重点关注
     

   数据保存:       

  • - JSON 文件储存
import json

    data = [{
        'xx':'xx',
        'xx':'xx',
        'xx':'xx'
    }]
 
with open ('data.json', 'w', encoding = 'utf-8') as file:
  file.write(json.dumps(data, indent=2, ensure_ascii=False))

       

  • - CSV 文件储存
import httpx
import csv

res = httpx.get('网址')

items = res.json()
item = items.get('Data')['Posts']  
data = []

for i in item:
    title =  i.get('RecruitPostName'),
    times =  i.get('LastUpdateTime'),
    data.append([title[0],times[0]])

with open('data2.csv', 'w',encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name'])
    writer.writerows(data)

     

  •   - 关系型数据库储存

         运用MySQL储存数据,以数据表的形式录入信息

  • - 非关系型数据库储存

          以MongoDB储存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值