1.robots协议
一般协议,不具有强制性
域名/robots.txt 查看
2.requests模块
是个第三方模块,需要安装 pip install requests -i https://pypi.doubanio.com/simple
利用requests模块发送网络请求 接收请求数据
3. 响应体操作
一般用content得到二进制数据,再decode,text能直接得到字符串数据,但是是自动解码,不一定准确
response.text 响应体 str类型 respones.content 响应体 bytes类型 response.status_code 响应状态码 response.request.headers 响应对应的请求头 response.headers 响应头 response.request._cookies 响应对应请求的cookie response.cookies 响应的cookie(经过了4.set-cookie动作)
4.with open as 语句操作文件读写
(1)如果得到的字符串数据,用w模式打开,需要设置编码格式encoding='utf-8'(具体编码要看网页所用的编码,在网页检查-elements-head标签下可以看到
with open('baidu.html','w',encoding="utf-8") as f:
# f.write(response_.text)
(2)如果以二进制数据写入的话,用wb模式,就不需要设置编码了 (比如图片,音频,视频等)
5.用户代理池(User-Agent池)
(1)使用列表,存放很多个User-Agent的值,然后用random模块的randint随机生成整数索引
(2)使用第三方库 fake-useragent 调用
pip install fake-useragent -i https://pypi.doubanio.com/simple
from fake_useragent import FakeUserAgent
use_agent_demo=FakeUserAgent().random
# 这个random不需要导入random模块,因为FakeUserAgent模块自己导入random了
(这个 .random打出来的时候会提示其他命令,不用管,直接输入random)
(网上的str(UserAgent().random)这个代码亲测失效,应该是升级过了,而且上面的代码返回的就是str,不需要再用str()转换)
(3)如果遇到fake-useragent运行报错
FakeUserAgentError('Maximum amount of retries reached')
1.尝试将如下参数一个一个填入()内:(正常调用时()内为空,不传参)
FakeUserAgent(use_cache_server=False).random
FakeUserAgent(cache=False).random
FakeUserAgent(verify_ssl=False).random
终极方法: ctrl点击FakeUserAgent进入源码> 找到from fake_useragent import settings (第7行),按ctrl点击settings进入源码 > 第16行CACHE_SERVER这里有一个https,把s去掉 > 如果有弹窗,点击OK > 再把s删掉 > 多运行几遍
6.url传参
URL最好从network里面的headers里面找
URL里会有干扰数据,凭经验或者一个个删除试
从/s? 后面开始,都是以键值对的形式出现,a=b的形式
如果参数b是中文,实际传参时浏览器会将中文转义,英文不转义,可以直接用转义后的参数做请求
from urllib.parse import quote,unquote
# # 明文(看得发懂的数据) 美食 固定的关系映射表(固定的格式) >> 密文(看不懂的)
# data_ = '美食'
# print(quote(data_)) # %E7%BE%8E%E9%A3%9F
# # 密文转为明文
# print(unquote('%E7%BE%8E%E9%A3%9A')) # '美女'
传参方式1
URL直接传参
input_wd = input('请输入你想搜索的关键字:')
url_ = f'https://www.baidu.com/s?wd={input_wd}'
传参方式2
通过params定义参数,发送请求时再带上参数
params_ = {
'wd':input_wd
}
response_ = requests.get(url_,headers=headers_,params=params_) # 把字典键值对自动拼接到url上面去



