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

Posted 是Dream呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫requests模块 入门到入狱 :基础知识+实战分析相关的知识,希望对你有一定的参考价值。

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

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

一、基本使用

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模块 入门到入狱 :基础知识+实战分析的主要内容,如果未能解决你的问题,请参考以下文章

爬虫从入门到入狱——正则表达式

Python爬虫从入门到进阶之requests的使用

Python网络爬虫入门篇

自学Python爬虫简单入门到进阶:正则表达式+lxml+requests+Beautiful Soup+基础

python爬虫从入门到放弃之 Urllib库的基本使用

Python爬虫从入门到进阶之urllib库的使用