爬虫requests模块 入门到入狱 :基础知识+实战分析
Posted 是Dream呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫requests模块 入门到入狱 :基础知识+实战分析相关的知识,希望对你有一定的参考价值。
📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨
前言:
requests库其实和urllib库是差不多的,但是urllib库的话有点过时了,所以说一般都是用的request库,下面一起来学习一下吧
爬虫requests模块基础入门+实战分析
一、基本使用
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.类型
```html
import requests
url = '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 requests
url = '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.text
print(content)
(2)特点总结
1.参数使用params传递
2.参数无需urlencode编码
3.无需请求对象定制
4.请求资源路径中的?可以加也可以不加
2.requests的post请求
(1)请求百度翻译
# -*-coding:utf-8 -*-
# @Author:到点了,心疼徐哥哥
# 奥利给干!!!
import requests
import json
url = '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请求的参数是data
3.不需要请求对象的定制
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 BeautifulSoup
soup = 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.text
with 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 requests
from 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 后要加()
❤️往期文章推荐❤️:
Python爬虫❤️ Urllib用法合集——⚡一键轻松入门爬虫⚡
爬虫中的恋爱学心理你get了吗?一杯星巴克温暖你的整个冬天——爬虫bs4解析从入门到入坑
❤️1024不孤单!❤️Xpath爬虫——你最忠实的伴侣:老规矩给我一分钟,万字教你入手Xpath!⚡
Python爬虫实战❤️ 从零开始分析页面,抓取数据——爬取豆瓣电影任意页数 看不懂你来找我!❤️
天青色等烟雨 爬虫在等你❤️post请求⚡cookie登录⚡handler处理器⚡
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
以上是关于爬虫requests模块 入门到入狱 :基础知识+实战分析的主要内容,如果未能解决你的问题,请参考以下文章