爬虫基本原理
-
爬取流程
(1)发起请求: 通过HTTP库向目标发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
(2)获取响应内容: 如果服务能正常响应,会得到一个Response,Response的内容就是要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
(3)解析内容: 得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。如果是Json,可以直接转换为Json对象解析,如果为二进制数据,可以保存或进一步处理。
(4)保存数据: 保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定的格式文件。 -
Request
(1) 请求方式: 主要由GET、POST请求,另外还有HEAD、PUB、DELETE、OPTIONS等。
(2) 请求头: 包含请求头部信息,如User-Agent、Host、Cookies等信息。
(3) 请求URL: URL全称统一资源定位,如一个网页文档、一张图片、一个视频都可以用URL来唯一确定。
(4) 请求体: 请求时额外携带的数据,如表单提交的表单数据 -
Response
(1) 响应状态: 200/301/302/304/400/403/404/500/501状态等
(2) 响应头: 内容长度、服务长度、服务器信息、折纸cookie等
(3) 响应体: 最主要的部分,包含请求的资源内容,如HTML、图片、二进制数据等import requests headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWeb Kit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"} response = requests.get("http://leadingme.top",headers=headers) print(response.status_code) print(response.headers) print(response.content) # 直接打印返回的结果 'UTF-8' print(response.text) # 打印转码后的文本内容
爬虫抓取数据
- 网页文本: 如HTML文档、Json格式的文本
- 图片: 获取的是二进制文件、保存为图片格式
将二进制数据图片写入文件中 import requests response = requests.get('https://dss2.bdstatic.com/kfoZeXSm1A5BphGlnYG/icon/weather/aladdin/png_18/a18.png') with open("F:/programNote/python爬虫2/03.png","wb") as f: f.write(response.content) f.close() file = open("F:/programNote/python爬虫2/03.png","rb") f = file.read() print(f)
- 视频: 同为二进制文件,保存为视平格式即可
解析方式
- 直接处理
- Json解析(转化为Json对象)
- 正则表达式
- BeautifulSoup解析库
- PyQuery
- Xpath
解决JavaScript渲染问题
- 分析Ajax请求(最开始的html文档是没有将所有数据加载出来的,通过后台接口用Ajax请求到数据)
- Selenium/WebDriver
保存数据
- 文本: 纯文本、Json、Xml等
- 关系型数据库: 如Mysql、Orche、SQL server等具有结构化表结构形式得存储
- 非关系型数据库: 如MongoDB、Redis等Key-Value形式存储
- 二进制文件: 如图片、视频、音频等直接保存成特定格式即可