您的位置:首页 > 科技 > IT业 > 产品外观设计网站_杭州免费建站_关键词林俊杰免费听_开发一个app平台大概需要多少钱?

产品外观设计网站_杭州免费建站_关键词林俊杰免费听_开发一个app平台大概需要多少钱?

2024/12/23 19:13:57 来源:https://blog.csdn.net/J080624/article/details/144425278  浏览:    关键词:产品外观设计网站_杭州免费建站_关键词林俊杰免费听_开发一个app平台大概需要多少钱?
产品外观设计网站_杭州免费建站_关键词林俊杰免费听_开发一个app平台大概需要多少钱?

requests 是一个非常流行的 Python 库,用于发送 HTTP 请求。它简单易用,功能强大,适合编写爬虫程序来抓取网页内容。

【1】安装与入门

① 安装

需要安装 requests 库,建议同时安装 BeautifulSoup 或 lxml:

pip install requests
pip install beautifulsoup4
pip install lxml

官方文档

http://cn.python‐requests.org/zh_CN/latest/

快速上手

http://cn.python‐requests.org/zh_CN/latest/user/quickstart.html

response的属性以及类型

类型 :models.Response
r.text : 获取网站源码
r.encoding :访问或定制编码方式
r.url :获取请求的url
r.content :响应的字节类型
r.status_code :响应的状态码
r.headers :响应的头信息

案例

import requests
url = 'http://www.baidu.com'
response = requests.get(url=url)# 一个类型和六个属性
# Response类型
# print(type(response))# 设置响应的编码格式
# response.encoding = 'utf-8'# 以字符串的形式来返回了网页的源码
# print(response.text)# 返回一个url地址
# print(response.url)# 返回的是二进制的数据
# print(response.content)# 返回响应的状态码
# print(response.status_code)# 返回的是响应头
print(response.headers)

② 处理请求重定向

默认情况下,requests 会自动处理 HTTP 重定向(如 301、302)。如果你不想自动跟随重定向,可以使用 allow_redirects=False 参数:

import requestsresponse = requests.get('https://httpbin.org/redirect/1', allow_redirects=False)print(f"状态码: {response.status_code}")
print(f"重定向到: {response.headers['Location']}")
  • allow_redirects=False:禁用自动重定向,返回原始的重定向响应。
  • 你可以通过 response.headers[‘Location’] 获取重定向的目标 URL。

③ 处理请求超时

为了避免请求长时间挂起,你可以设置请求的超时时间。如果请求在指定时间内没有完成,requests 会抛出 Timeout 异常。

import requeststry:response = requests.get('https://example.com', timeout=5)  # 超时时间为 5 秒print(response.text)
except requests.Timeout:print("请求超时")

timeout 参数:设置请求的超时时间(以秒为单位)。你可以为连接和读取分别设置不同的超时时间:

response = requests.get('https://example.com', timeout=(5, 10))  # 连接超时 5 秒,读取超时 10 秒

【2】GET请求

import requests
url = 'http://www.baidu.com/s?'
headers = {
'User‐Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
data = {
'wd':'北京'
}
response = requests.get(url,params=data,headers=headers)

定制参数

参数使用params传递
参数无需urlencode编码
不需要请求对象的定制
请求资源路径中?可加可不加

【3】POST请求

import requests
post_url = 'http://fanyi.baidu.com/sug'
headers={
'User‐Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
data = {
'kw': 'eye'
}
response = requests.post(url = post_url,headers=headers,data=data)content =response.textimport jsonobj = json.loads(content,encoding='utf-8')
print(obj)

【4】代理

在请求中设置proxies参数,参数类型是一个字典类型

import requests
url = 'http://www.baidu.com/s?'
headers = {
'user‐agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
data = {
'wd':'ip'
}
proxy = {
'http':'219.149.59.250:9797'
}
r = requests.get(url=url,params=data,headers=headers,proxies=proxy)
with open('proxy.html','w',encoding='utf‐8') as fp:
fp.write(r.text)

【5】Cookie

有些网站需要登录或保持会话状态,这时你可以使用 requests.Session() 来管理 cookies。Session 对象会在多个请求之间共享 cookies,模拟浏览器的行为。

  • requests.Session():创建一个会话对象,所有请求都会共享相同的 cookies 和会话信息。
  • 可以使用 session.cookies 来查看或修改会话中的 cookies。

如下是一个案例,绕过古文文网的登录,进入登录后的页面。

# 通过登陆  然后进入到主页面
# 通过找登陆接口我们发现 登陆的时候需要的参数很多
# _VIEWSTATE: /m1O5dxmOo7f1qlmvtnyNyhhaUrWNVTs3TMKIsm1lvpIgs0WWWUCQHl5iMrvLlwnsqLUN6Wh1aNpitc4WnOt0So3k6UYdFyqCPI6jWSvC8yBA1Q39I7uuR4NjGo=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 11111111@qq.com
# pwd: action
# code: PId7
# denglu: 登录# 我们观察到_VIEWSTATE   __VIEWSTATEGENERATOR  code是一个可以变化的量# 难点:(1)_VIEWSTATE   __VIEWSTATEGENERATOR  一般情况看不到的数据 都是在页面的源码中
#     我们观察到这两个数据在页面的源码中 所以我们需要获取页面的源码 然后进行解析就可以获取了
#     (2)验证码import requests# 这是登陆页面的url地址
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/92.0.4515.159 Safari/537.36'
}# 获取页面的源码
response = requests.get(url = url,headers = headers)
content = response.text# 解析页面源码  然后获取_VIEWSTATE   __VIEWSTATEGENERATOR
from bs4 import BeautifulSoupsoup = BeautifulSoup(content,'lxml')# 获取_VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')# 获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code# 有坑
# import urllib.request
# urllib.request.urlretrieve(url=code_url,filename='code.jpg')
# 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的参数 就可以登陆code_name = input('请输入你的验证码')# 点击登陆
url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'data_post = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstategenerator,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': '22222222@qq.com','pwd': 'action','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)# 难点
# (1) 隐藏域
# (2) 验证码

【6】使用超级鹰打码平台解析图片验证码

#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernamepassword =  password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.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('超级鹰用户名', '超级鹰用户名的密码', '96001')	#用户中心>>软件ID 生成一个替换 96001im = open('a.jpg', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//print(chaojiying.PostPic(im, 1902))											#1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com