一.爬虫简介
1.什么是爬虫
一个模仿浏览器行为向服务器发送请求并且获得响应数据的应用程序.
流程:发起请求===>获取数据===>解析数据===>存储数据
常见请求库:requests
常见解析库:
常见存储库:mongodb
常见的抓包工具:网页的network,Fiddler,mitmproxy
console控制台:
document.charset(查看js的解码方式)
2.http协议格式
'''
请求:Request URL:
REquest Method:
"GET":
?拼接参数
"POST":
请求体:
1.formdata
2.json
3.files
请求头:
cookies:(保存信息,主要用于记录用户登录状态)
user-agent:用户身份
referer:告知服务器,请求从何来(防盗链)
服务器特有字段
'''
'''
响应:
status code:状态码
响应头:
location:重定向的url
set-cookie:设置cookie
服务器特定字段
响应体:
1.html
2.二进制:图片,视频,音频
3.json
4.jsonp:允许跨域
3.常见库
请求库:requests
安装:pip install requests
#get请求
requests.get()
参数:'''
url:
headers={
"user-agent":"xxx",
...
}
params={}:url参数
cookies={}(优先使用headers中的cookies参数)
proxies = {"http":"http://..."} :代理ip
timeout = 0.5 超时时间
allow_redirects = True 允许重定向
'''
#post请求
requests.post()
参数:'''
前面6个与get请求一样
data = {}
json = {}/'123' 注:json与data只能存在一种
files = {"files":open("文件地址","rt",encoding=utf-8)}
'''
响应:
response = requests.get()
response.url :请求地址
response.text :响应文本信息
response.encoding='gbk' :文本编码方式
response.content :二进制
response.json :转json格式,相当于json.loads(response.text)
response.status_code :状态码
response.headers :响应头
response.history :[响应对象1,...],重定向才有
自动保存cookie的请求:
session = requests.session()
r = session.get(......)或
r = session.post(......)
补充:(保存cookie到本地)
import http.cookiejar as cookielib
session.cookie = cookielib.LWPCookieJar()
session.cookie.save(filename='1.txt') 保存cookie至本地文件
session.cookies.load(filename='1.txt') 本地文件取出cookie
4.常用解析语法
CSS选择器:
类选择器(.类名)
id选择器(#id值)
标签选择器(标签)
后代选择器(祖先 后代):表示祖先下面的所有后代都会被选择
子选择器(父>子):表示父标签下的所有子代标签会被选择
兄弟选择器(兄~弟):表示兄标签相邻的弟弟标签会被选择,且必须是同级
属性选择器([属性名]、[属性名=属性值]:精确选择,有空格都不行、[属性名^=属性值]、[属性名$=属性值]、[属性名*=属性值]):正则匹配
群组选择器(选择器1,选择器2):代表or
多条件选择器(选择器1选择器2):代表and
伪类选择器(选择器:active/hover/first-child/visited):含有指定的属性才会被选择
XPATH选择器:略
5.常见的反爬手段
检测浏览器headers
ip封禁
图片验证码
滑动模块
js轨迹
前端反调试