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 进行安装
- 可在chrome浏览器安装插件 插件-国内无法直接访问
- 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模块