写点什么

爬虫 requests 模块 入门到入狱 :基础知识 + 实战分析

作者:是Dream呀
  • 2022 年 2 月 15 日
  • 本文字数:3539 字

    阅读完需:约 12 分钟


📢📢📢📣📣📣🌻🌻🌻Hello,大家好我叫是 Dream 呀,一个有趣的 Python 博主,小白一枚,多多关照😜😜😜🏅🏅🏅CSDN Python 领域新星创作者,大二在读,欢迎大家找我合作学习💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺🍉🍉🍉“一万次悲伤,依然会有 Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈🌟🌟🌟✨✨✨


前言:requests 库其实和 urllib 库是差不多的,但是 urllib 库的话有点过时了,所以说一般都是用的 request 库,下面一起来学习一下吧


@TOC

一、基本使用

1.使用文档

官方文档http://cn.python‐requests.org/zh_CN/latest/


快速上手http://cn.python‐requests.org/zh_CN/latest/user/quickstart.html

2.安装

pip install requests
复制代码


安装成功后会有 successfully 的提示,已安装会有 Requirement already satisfied 的提示:


3.response 的属性以及类型

1.类型


```htmlimport requestsurl = 'https://www.baidu.com/'response = requests.get(url = url)# 一种类型 六个属性# Response类型print(type(response))
复制代码


<class 'requests.models.Response'>
复制代码


2.以字符串形式来返回网页的源码


# 以字符串形式来返回网页的源码print(response.text)
复制代码



3.返回一个 url 地址


# 返回一个url地址print(response.url)
复制代码


https://www.baidu.com/
复制代码


4.返回的是二进制数据


# 返回的是二进制数据print(response.content)
复制代码



5.返回响应的状态码


# 返回响应的状态码print(response.status_code)
复制代码


200
复制代码


6.返回的是响应头


# 返回的是响应头print(response.headers)
复制代码


二、简单对比 urllib 和 requests

1.urllib

# (1)一个类型以及六个方法# (2)get请求# (3)post请求  百度翻译# (4)ajsx的get请求# (5)ajax的post请求# (6)cookie登录 微博# (7)代理
复制代码

2.requests

# (1)一个类型 六个属性# (2)get请求# (3)post请求# (4)代理# (5)cookie 验证码
复制代码

三、requests 方法应用

1.requests 的 get 请求

(1)请求百度界面

import requestsurl = 'https://www.baidu.com/s'headers={    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}data = {    'wd': '北京'}
# url 请求资源路径# params 参数# kwargs 字典response = requests.get(url=url, params=data, headers=headers)content = response.textprint(content)
复制代码

(2)特点总结

1.参数使用 params 传递 2.参数无需 urlencode 编码 3.无需请求对象定制 4.请求资源路径中的?可以加也可以不加

2.requests 的 post 请求

(1)请求百度翻译

# -*-coding:utf-8 -*-# @Author:到点了,心疼徐哥哥# 奥利给干!!!import requestsimport jsonurl = 'https://fanyi.baidu.com/sug'headers={    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}data = {    'kw':'eye'}# url请求地址# data请求参数# kwargs 字典response = requests.post(url=url, data=data, headers=headers)content = response.text
print(content)obj = json.loads(content,encoding='utf-8')print(obj)
复制代码


(2)特点总结

1.post 请求不需要编解码 2.post 请求的参数是 data3.不需要请求对象的定制

3.requests 的 cookie 代理

(1)登录古诗文网

1.打开古诗文网:古诗文网



2.登录界面:


# 登录界面url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
复制代码


3.获取页面的源码


# 获取页面的源码:response = requests.get(url=url,headers=headers)content = response.text
复制代码


4.解析页面源码,然后获取'__VIEWSTATE'和'__VIEWSTATEGENERATOR'


# 解析页面源码,然后获取'__VIEWSTATE'和'__VIEWSTATEGENERATOR'from bs4 import BeautifulSoupsoup = BeautifulSoup(content,'lxml')
# 获取'__VIEWSTATE'viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
# 获取'__VIEWSTATEGENERATOR'viestategener = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
复制代码


5.获取验证码图片


# 获取验证码图片code = soup.select('#imgCode')[0].attrs.get('src')code_url ='  https://so.gushiwen.cn'+code
复制代码


6.获取图片验证码后,保存到本地,然后观察验证码进行输入。


# 获取图片验证码后,保存到本地,然后观察验证码进行输入。# requests里面有一个session()方法,通过session的返回值 就能使用请求变成一个对象session = requests.session()# 验证码的url的内容response_code = session.get(code_url)# 注意此时要使用二进制数据content_code = response_code.content# wb的模式就是将二进制数据写入文件with open('code.jpg','wb')as fp:    fp.write(content_code)
code_name = input('请输入你的验证码:')、
复制代码


7.点击登录


url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
data_post = { '__VIEWSTATE':viewstate , '__VIEWSTATEGENERATOR':viestategener , 'from': 'http://so.gushiwen.cn/user/collect.aspx', 'email': '18300396393', 'pwd': '20020102XYPxyp', 'code': code_name, 'denglu':'登录',}response_post = session.post(url=url,headers=headers,data=data_post)content_post = response_post.textwith open('gushiwen.html','w',encoding='utf-8') as fp: fp.write(content_post)
复制代码


8.获取动态验证码



9.打开得到的网站:



进入:



成功撒花!

(2)难点

1.隐藏域 2.验证码

四、自动识别验证码

1.首先找到超级鹰网站:

超级鹰



可用账号及密码: 账号:action 密码:action

2.然后在开发文档中找到 Python:


进入之后进行 Python 语言 Demo 下载。

3.修改代码

将下载好的 Demo 放入我们我们的工程文件中去,观察其代码:1.将此处换成我们的用户名和代码



2.按照提示来替换我们的 id:



3.生成我们自己的一个软件 id:



4.最后在 print 后面加上(),就可以啦!5.由于返回字典,就可以通过键值对对应关系,找到我们的验证码的值了:



4.源码分享:


#!/usr/bin/env python# coding:utf-8
import requestsfrom hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id): self.username = username password = password.encode('utf8') self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { 'user': self.username, 'pass2': self.password, 'softid': self.soft_id, } self.headers = { 'Connection': 'Keep-Alive', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', }
def PostPic(self, im, codetype): """ im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """ params = { 'codetype': codetype, } params.update(self.base_params) files = {'userfile': ('ccc.jpg', im)} r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers) return r.json()
def ReportError(self, im_id): """ im_id:报错题目的图片ID """ params = { 'id': im_id, } params.update(self.base_params) r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers) return r.json()

if __name__ == '__main__': chaojiying = Chaojiying_Client('action', 'action', '925358') #用户中心>>软件ID 生成一个替换 96001 im = open('a.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要// print(chaojiying.PostPic(im, 1902).get('pic_str')) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
复制代码


🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~



用户头像

是Dream呀

关注

Python领域优质创作者 2021.03.30 加入

2021年度博客之星TOP100,2021年度领域TOP5 Python领域优质创作者,交流、合作、学习,欢迎私信我VX+++ 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!

评论

发布
暂无评论
爬虫requests模块 入门到入狱 :基础知识+实战分析