爬虫:
请求网站 并 提取数据 的 自动化程序
爬虫基本流程:
发起请求 -> 获取响应 -> 解析内容 -> 保存数据
Request
请求方式 Request Method:get post
请求url Request URL
请求头 Request Headers
请求体 Form Data
Response
响应状态 Status code 200ok 301跳转 404找不到页面 502服务器错误
响应头 Response Headers 设置cookies
响应体 Response Body
抓取的数据格式
网页文本 html json
二进制文件 图片 视频
代码示例:
>>> import requests
# 下载网页文件
>>> response = requests.get("http://www.baidu.com")
>>> response.status_code
200
>>> len(response.text)
22240
>>> response.headers
{'Content-Type': 'text/html', 'Content-Encoding': 'gzip', 'Expires': 'Thu, 10 Dec 2026 23:21:37 GMT', 'Cache-Control': 'max-age=7776000', 'Content-Length': '8436', 'Connection': 'close'}
# 增加请求头
>>> headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
>>> response = requests.get("http://www.baidu.com", headers=headers)
>>> response.status_code
200
# 下载图片,二进制文件
>>> response = requests.get("https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png", headers=headers)
>>> response.status_code
200
>>> with open("baidu.jpg", "wb") as f:
... f.write(response.content)
... f.close()
...
6958
解析方式
直接处理
json解析
正则表达式
BeautifulSoup
XPath
pyquery
解决JavaScript渲染
分析Ajax
selenium库
Splash
PyV8 Ghost.py
保存数据
纯文本 txt, json, xml
关系型数据库 mysql sqlite oracle sqlserver
非关系型数据库 MongoDB Redis
二进制存储 图片 声音 视频