Python爬虫(requests模块1)
Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用。
Requests基础学习
使用方法:
1.导入Requests模块:
1 | import requests |
2.尝试用get获取某个页面,以百度为例子
1 2 | url = 'http://www.baidu.com' r = requests.get(url) |
r是一个response对象。可以从这个对象中获取所有想要的信息。
发送简单get的请求:
response.text和response.content的区别:
response.text
- 返回类型:str
- 解码类型:根据HTTP头部对响应的编码作出有根据的推测的文本编码
- 如何修改编码方式:response.encoding = 'gbk'
response.content
- 返回类型:bytes
- 解码类型:没有指定
- 如何修改编码方式:response.content.decode('ut8-f')
实例:获取百度图片
1 2 3 4 5 | import requests url = 'https://www.baidu.com/img/bd_logo1.png' response = requests.get(url) with open ( 'baidu.png' , 'wb' ) as p: p.write(response.content) |
发送带header的get请求:
发送带参数的get请求:
实战(贴吧爬虫):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import requests class TiebaSpider: #构造函数,传入想要查询的贴吧名字和查询前num页,定义后面方法需要用的属性 def __init__( self ,tieba_name,tieba_num): self .tieba_num = tieba_num self .tieba_name = tieba_name #下面为url访问的格式,kw为贴吧名,pn为代表页数,贴吧可查首页pn=0,第一页50,第二页100,以此类推 self .url_temp = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}" #模仿网页访问贴吧 self .headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } #获取url列表 def get_urlList( self ): url_list = [] for i in range ( self .tieba_num): url_list.append( self .url_temp. format (i * 50 )) return url_list #访问网页,解析网页,返回 def parse_url( self ,url): response = requests.get(url,headers = self .headers) return response.text #或者response.content.decode('utf-8') #保存网页 def save_html( self ,html_str,page_num): file_path = "{}-第{}页.html" . format ( self .tieba_name,page_num) with open (file_path, 'w' ,encoding = 'utf-8' ) as f: f.write(html_str) def run( self ): url_list = self .get_urlList() for url in url_list: html_str = self .parse_url(url) #保存的内容 page_num = url_list.index(url) + 1 #文件的页码 self .save_html(html_str,page_num) def main(): tieba_name = input ( '请输入想查询的贴吧名:' ) tieba_num = int ( input ( '请输入想要查询前几页:' )) tieba = TiebaSpider(tieba_name, tieba_num) tieba.run() if __name__ = = '__main__' : main() |
Requests深入学习
发送post请求
哪些地方我们会用到POST请求:
- 登录注册(POST比GET更安全)
- 需要传输大文本内容的时候(POST请求对数据长度没有要求)
- 所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求
使用代理
为什么爬虫需要使用代理
- 让服务器以为不是同一个客户端在请求
- 防止我们的真实地址被泄漏,防止被追究
用法:request.get('http://www.baidu.com',proxies = proxies)
proxies的形式:字典
proxies = {
"http" : "http://12.34.56.79:9527",
"https" : "http://12.34.56.79:9527",
}
步骤:
- 准备一堆IP地址,组成ip池,随机选择一个ip来使用
- 随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到
- {"ip" : ip,"time",0}
- [{},{},{},{},]对这个ip列表进行排序,按照使用次数进行排序
- 选择使用次数较少的10个ip,从中随机选择一个
- 检查ip的可以性
- 可以使用requests添加超时参数,判断ip地址的质量
- 在线代理ip质量检测的网站
爬虫处理cookie和session
带上cookie,session的好处:
能够请求到登录之后的页面
带上cookie,session的弊端:
一套cookie和session往往和一个用户对应,请求太快或者太多,容易被服务器识别为爬虫
不需要cookie的时候尽量不去使用cookie
处理cookies,session请求
requests提供了一个叫session类,来实现客户端和服务端的会话保持
使用方法:
1.实例化一个session对象
2.让session发送get或者post请求
session = requests.session()
cookies = {cookies字典}
response = session.get(url,headers=headers,cookies=cookies)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!