CY3761 | 2021-11-20 11:03

01-说明

爬虫步骤与说明

  • 根据需求进行分析是爬取单页数据还是多页数据
  • 单页数据基本可以带请求头等直接请求
  • 多页数据需要分析其url, 如列表分页、详情页、小说下一章等
  • 分析数据源是请求url直接可以获取还是通过ajax获取的
  • 爬虫需要遵守其网站的robots.txt协议 (虽然这样说, 但很多为了数据都不会遵守)
  • 这是百度的robots: 百度的robots
  • Disallow 禁止 | 后面是禁止的路径规则
  • 值的看的一个论题 爬虫究竟是合法还是违法的?
  • 我个人认为, 爬虫是可以的, 但不能伤害到爬取方, 爬取内容必须公开(浏览器也能直接访问). 不能爬取个人私隐
  • 爬取的内容一旦涉及商业, 就需要注意, 是否违法了, 有些钱是不能挣的
  • 爬虫一般需要设置头信息 User-agent
  • 可以使用 from fake_useragent import UserAgent 动态设置ua值
  • 也可以从浏览器获取
  • 爬取页面后建议先缓存起来, 虽然别人时免费给你信息, 但也不能针对同一样东西操人家多次
  • 针对需要爬取多页数据的爬虫需要注意, 更改ua、设置代理ip、每次执行请求后等待一定时间再请求下一次
  • 获得的html, 需要通过解析器进行解析dom方便获取数据, 如果是ajax或者返回的是json, 使用 json.loads 后当字典使用就可以
  • from pyquery import PyQuery as pq | $ jquery | 使用 pip install pyquery 进行安装
  • from lxml import etree | xpath | 使用 pip install lxml 进行安装
  • from bs4 import BeautifulSoup | 有点类似 pyquery | pip install bs4
  • 解析到需要数据后就进行保存
  • 文件保存
  • txt | open
  • cvs | open + import csv | csv.writer().writerow([]) | py内置库, 不需要安装
  • excel | openpyxl | openpyxl.Workbook | pip install openpyxl
  • 数据库保存
  • mysql 关系型数据库 需要建库、表结构 | import mysql.connector | pip install mysql-connector
  • mongodb 非关系型数据库 无需建库、表结构 | import pymongo | pip install pymongo
  • redis(分布式) | 可分布式, 多台计算机进行爬虫, 数据保存到另一台中 | import redis | py内置库, 不需要安装
  • 当然还可以把数据通过邮件或者接口方式进行处理

爬虫语言区别

  • PHP
  • PHP是世界上最好的语言,但他天生不是做这爬虫的“材料”,因为它对多线程、异步支持的不是很好,并发处理能力弱。爬虫是工具性程序,对速度和效率要求比较高。
  • Java
  • Python爬虫最大的竞争对手。但是Java语言本身很笨重,代码量很大。重构成本比较高,任何修改会导致代码大量改动。爬虫经常要修改采集代码。
  • C/C++
  • 运行效率是无敌的。但是学习和开发成本高。写个小爬虫程序可能要大半天时间。
  • Python
  • 语法优美、代码简洁、开发效率高、支持的模块多。相关的HTTP请求模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redis框架让我们开发爬虫变量异常简单。

http、https、json

  • http
  • 全称是HyperText Transfer Protocal ,中文意思是超文本传输协议,是一种发布和接收HTML(HyperText Markuup Language)页面的方法。服务器端口号为80端口
  • https
  • (全称:Hyper Text Transfer Protocol over SecureSocket Layer) ,是HTTP协议的加密版本,在HTTP下加入了SSL层,服务器端口号是443
  • json
  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

请求头参数

  • user-agent: 浏览器标识
  • referer: 表明当前这个请求是从哪个url过来的
  • cookie:http协议是无状态的。也就是同一个人发送了两次请求。服务器没有能力知道这两个请求是否来自同一个人。

请求方式

  • get | 一般浏览器直接访问的 | 如果带问号, 问号后的就是请求参数, 明文显示, 中文会被转码 | 可提交数据比较小 1k字节内(视乎浏览器)
  • post | 一般数据提交 注册、登录、订单 等, 提交数据只在浏览器开发者显示, 可提交数据大小比get方式更大, 上传文件必须使用post

常见响应码

  • 200 正常
  • 301 永久重定向
  • 404 url在服务器找不到
  • 418 发送请求遇到服务器端反爬虫,服务器拒绝响应数据
  • 500 服务器内部错误,可能是服务器出现了bug

session、cookie

  • session
  • Session代表服务器与浏览器的一次会话过程 存储在服务器
  • Session是一种服务器端的机制,Session对象用来存储特定用户会话所需的信息
  • Session由服务器端生成,保存在服务器的内存、缓存、硬盘或数据库中
  • 如果服务器发现没有这个访问者的信息
  • 创建 sessionId 并响应时以cookie形式返回 sessionId
  • 下次再访问就会携带这个 sessionId 信息
  • cookie
  • 由服务器生成后发送给客户端 在客户端保存
  • cookie 能够存储的数据大小有限(比较小的数据)

下个部分应该是urllib模块