HTTP
超文本传输协议
默认端口号:80
HTTPS # HTTPS比HTTP更安全,但是性能更低
HTTP + SSL(安全套接字层)
默认端口号:443
url形式 -> scheme://host[:port#]/path/…/[?query-string][#anchor]
当前url地址对应的响应中
其他的url地址对应的响应中
js生成的数据
爬虫只获取当前url地址对应的响应,不会进一步获取js的响应
而当前url地址的elements的内容和url的响应不一样
Host -> (主机和端口号)
Connection -> (链接类型)
Upgrade-Insecure-Requests -> (升级为HTTPS请求)
User-Agent -> (浏览器名称)***
Accept -> (传输文件类型)
Referer -> (页面跳转源)
Accept-Encoding -> (文件编解码格式)
Cookie -> (Cookie)***
x-requested-with?:XMLHttpRequest -> (是Ajax?异步请求)
200:成功
302:重定向,临时转移至新的url
307:重定向,临时转移至新的url
404:not found
500:服务器内部错误
网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
例如:https://www.taobao.com/robots.txt
import requests
response = requests.get(url)
response.text -> 类型:str, 根据HTTP 头部标明的代码自动解码,可能出错
respones.content -> 类型:bytes, 修改编码response.content.deocde(“utf8”)
response.status_code -> 状态码
response.request.headers -> 响应头
response.headers -> 请求头
response.url -> 请求的url
response.request.url -> 响应的url
response = requests.get(url,headers=headers) # 发送带header的请求
response = requests.get(url,params=kw) # 发送带?=参数的请求
response = requests.post("http://www.baidu.com/", data = data,headers=headers) # 发送带POST的请求
url = "..."
headers = {‘User-Agent‘:‘...‘,...}
data = {...}
response.content.decode() # 默认utf-8,大多数情况下推荐
response.content.decode("gbk")
response.encoding=”gbk”
response.text
# 更推荐使用response.content.deocde()的方式获取响应的html页面
assert response.status_code==200
proxies = {
"http": "http://12.34.56.79:9527", # proxies={协议:协议+ip+端口}
"https": "https://12.34.56.79:9527",
}
requests.get("http://www.baidu.com", proxies = proxies)
准备一堆的ip地址,组成ip池,随机选择一个ip来时用
如何随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到
- {"ip":ip,"times":0}
- [{},{},{},{},{}],对这个ip的列表进行排序,按照使用次数进行排序
- 选择使用次数较少的10个ip,从中随机选择一个
检查ip的可用性
- 可以使用requests添加超时参数,判断ip地址的质量
- 在线代理ip质量检测的网站
携带一堆cookie进行请求,把cookie组成cookie池
requests.session
session = requests.session()
session.post(url,data=data,headers=headers)
response = session.get(url,headers)
cookie放在headers中
headers = {"Cookie":"cookie字符串"}
cookie转化为字典放在请求方法中
requests.get(url,cookies={"name的值":"values的值"})
cookies="anonymid=j3jxk555-nrn0wh; _r01_=1; _ga=GA1.2.1274811859.1497951251; "
cookies = {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}
[self.url_temp.format(i * 50) for i in range(1000)]
form表单的action属性
抓包,寻找js的url地址
reqeusts.utils
requests.get(url,cookies={})
reqeusts.utils.dict_from_cookiejar # 把cookie对象转化为字典
reqeusts.utils.cookiejar_from_dict # 把cookie字典转化为对象
requests.utils.quote("...") # url编码
requests.utils.unquote("...") # url解码
忽略SSL证书验证
response = requests.get("https://www.12306.cn/mormhweb/", verify=False)
设置请求超时时间
response = requests.get(url,timeout=10)
配合状态码判断是否请求成功
assert response.status_code == 200
retrying模块
@retry(stop_max_attempt_number=3) # 通过装饰器使用
def fun1():
...
pip install retrying
***.whl
文件安装方法 pip install ***.whl
抓包工具
Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP,HTTPS请求
原文:https://www.cnblogs.com/JeromeLong/p/13235565.html