当前位置: 首页 > news >正文

尚硅谷爬虫note13

一、requestes的post请求

# _*_ coding : utf-8 _*_
# @Time : 2025/2/24 13:57
# @Author : 20250206-里奥
# @File : demo04_requests_post请求
# @Project : 24-28
import requests

#爬取百度翻译

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/133.0.0.0 Safari/537.36'
}

data = {
    'kw': 'eye'
}

#url:请求地址;  data:请求参数;  kwargs:字典
response = requests.post(url = url,data = data,headers = headers)

content = response.text

# print(content)
#json转为中文
import json
obj = json.loads(content,encoding = 'utf-8')
print(obj)

#总结
#post请求不需要编解码
# post请求的参数是data,和get不一样
# 不需要请求对象的定制
#

二、代理

# _*_ coding : utf-8 _*_
# @Time : 2025/2/26 09:04
# @Author : 20250206-里奥
# @File : demo05_requests_代理
# @Project : 24-28


#
import requests

url = 'https://www.baidu.com/s?'

# headers
headers = {
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
#data
data = {
    'wd':'id'
}
#快代理,字典
#协议同url里面的协议:HTTP/HTTPS
#购买及使用快代理:购买成功——查看订单——生成api链接——生成链接——复制链接——网址栏输入复制的链接
proxy = {
    'https':'106.119.160.179:16817'
}

response = requests.get(url = url,data = data,headers=headers,proxies=proxy)
content = response.text
# print(content)
#保存到本地
with open('代理.html','w',encoding='utf-8') as fp:
    fp.write(content)

 三、cookie登录古诗文网

# _*_ coding : utf-8 _*_
# @Time : 2025/2/26 10:16
# @Author : 20250206-里奥
# @File : demo06_requests_cookie登录古诗文网
# @Project : 24-28

#cookie登录古诗文网

#通过登录 然后进入到主页面
#如何查找登录接口(2种方式):1)检查——network,然后输入错误信息登录时抓接口(不要点击登陆失败时弹出的“确定”,否则会跳转)——login...开头的就是登录接口;2)

#通过查找登录接口,可以看到需要的参数很多
#不认识的参数基本上是变化的:__VIEWSTATE;__VIEWSTATEGENERATOR;code
# __VIEWSTATE: j9SsxAuP/f7v1794M9LEIWoK2Jx/4qtmwepRqN+aevIgLxxX3YjeIrMITMUp/Nrq4rRR6CE+XWm+8YdD6KgBrQTXez33HSrkVv1ODKBTBv3fIF/65RI2RP/BVt4HnMYqP79opleiv78IofwEBY4AGOa8ZdQ=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://www.gushiwen.cn/user/collect.aspx
# email: 18485786140
# pwd: 122222222
# code: tkz6
# denglu: 登录

#难点1)__VIEWSTATE;__VIEWSTATEGENERATOR;一般情况下,看不到的数据在页面源码中
#   2)验证码
#hidden:隐藏域,页面中存在,但是不在页面中显示
#__VIEWSTATE;__VIEWSTATEGENERATOR在页面源码中,所有需要获取源码进行解析

import requests
#登录页面的url
url = 'https://www.gushiwen.cn/user/login.aspx?from=http://www.gushiwen.cn/user/collect.aspx'
#U-A
headers = {
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}

#访问
response = requests.get(url=url,headers=headers)
# 获取数据
content = response.text
# print(content)

#解析页面源码,获取__VIEWSTATE;__VIEWSTATEGENERATOR
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
#获取__VIEWSTATE,返回的是一个列表
viewstate = soup.select('#__VIEWSTATE')[0].sttrs.get('value')
#获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

print(viewstate)
print(viewstategenerator)


#获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = '' + code

# 获取验证码图片之后,控制套输入验证码,给code的参数就可以登录

import urllib.request
urllib.request.urlretrieve(url = code_url,filename='code.jpg')


#requests里有一个方法session():通过session的返回值,可以使请求变成1个对象
session = requests.session()
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('请输入验证码')


url_post = ''
data_post = {
    '__VIEWSTATE': viewstate,
   ' __VIEWSTATEGENERATOR': viewstategenerator,
    'from': 'http://www.gushiwen.cn/user/collect.aspx',
    'email': '18485786140',
    'pwd': '122222222',
    'code': code_name,
    'denglu': '登录'
}

response_post = session.post(url = url,headers=headers,data=data_post)
content_post = response_post.text

with open('gushiwang.html','w',encoding='utf-8') as fp:
    fp.write(content_post)

# #requests里有一个方法session():通过session的返回值,可以使请求变成1个对象
# session = requests.session()
# response_code = session.get(code_url)
# #此时要使用二进制数据
# content_code = response_code。content
# #wb模式:将二进制数据写入文件
# with open('code.jpg','wb',) as fp:
#     fp.write(content_code)

相关文章:

  • 一张表解释01背包问题
  • js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
  • 总结前端常用数据结构 之 栈篇【JavaScript 】
  • ipe网络安全
  • 30.C++多态 3 (多态的原理,虚指针,虚函数表,抽象类)
  • Python学习第十七天之PyTorch保姆级安装
  • 数据结构与算法-图论-最短路-拓展运用
  • CSDN年度评选揭晓,永洪科技AI技术与智能应用双星闪耀
  • 双重机器学习DML
  • HTTPS 与 HTTP 的区别在哪?
  • 【FL0091】基于SSM和微信小程序的社区二手物品交易小程序
  • 002 Java操作kafka客户端
  • Spring Security实战:如何实现OAuth2.0认证与授权?
  • Spring Boot 实战:构建 RESTful API 服务
  • Vue 项目中配置代理的必要性与实现指南
  • ChatGPT入驻Safari,AI搜索时代加速到来
  • 打包rocketmq-dashboard报错问题记录
  • 游戏引擎学习第125天
  • 免费使用SCI润色神器QuillBot
  • LabVIEW同步数据采集功能
  • 三亚通报救护车省外拉警报器开道旅游:违规违法,责令公司停业整顿
  • 智能手表眼镜等存泄密隐患,国安部提醒:严禁在涉密场所使用
  • 盖茨说对中国技术封锁起到反作用
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 水豚“豆包”出逃已40天,扬州茱萸湾景区追加悬赏
  • 年轻小将绽放光芒!中国短跑男女接力队直通东京世锦赛