爬取总结记录:由于经验不足,个人尝试了很多方法,都失败了,查看了网站的上面别人的爬取经验,按照别人做的,但都没有成功。
几经波折最后终于解决了。
好了上代码:
其中有涉及到个人信息的,这里进行了模糊处理。

import timeimport requests
from lxml import etree
from chaojiying.chaojiying import Chaojiying_Clientif __name__ == '__main__':# 1、设置ua头,进行伪装headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'}# 2、进行登录界面的请求url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx?type=d'response_get = requests.get(url=url, headers=headers)# 获取请求登录接口后的cookie信息,这个执行登录操作时会用到。print(response_get.cookies.keys())print(response_get.cookies.values())# 获取登录界面,并保存本地response = response_get.textwith open('./denglu.html', 'w', encoding='utf-8') as fp:fp.write(response)# 读取下载到本地的登录页面数据tree = etree.HTML(response)# 解析出验证码连接(这里要拼接一下url)code_image_src = 'https://so.gushiwen.cn' + tree.xpath('//*[@id="imgCode"]/@src')[0]# 获取viewstate和viewstateenerator值,这个进行登录请求传参时会用到viewstate = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]viewstateenerator = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]print(code_image_src)print(viewstate)print(viewstateenerator)# 这里请求验证码图片链接获取图片,用到了请求登录界面返回回来的cookies信息。(至于为什么要加登录界面返回回来的cookies信息,可以查看web端网络连接# 在获取验证码图片时也进行了cookie传递,其实这是为了让服务器知道是我们的当前会话进行验证码请求,而不是别人请求验证码。)img_res = requests.get(url=code_image_src, headers=headers, cookies=response_get.cookies)# 查看请求图片链接返回回来的cookie信息,这个在进行登录请求时也会用到。print(img_res.cookies.keys())print(img_res.cookies.values())img_content = img_res.content# 保存登录验证码图片,用于识别。with open('./gushiwen.jpg', 'wb') as fp:fp.write(img_content)# 解析验证码:我这里用了第三方工具超级鹰,这个可以注册一个很便宜。也可以使用其他验证码识别。chaojiying = Chaojiying_Client('你自己的个人信息', '你自己的个人信息', '你自己的个人信息')  # 用户中心>>软件ID 生成一个替换 96001im = open('./gushiwen.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//# im = open('a.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//print(chaojiying.PostPic(im, 1902))  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()shibie_result = chaojiying.PostPic(im, 1902)result = shibie_result['pic_str']print("*" * 100)print(type(result))print('result:' + result)print("*" * 100)# 2、进行登录请求操作denglu_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'# 设置登录请求体数据。这里用的是post方式进行登录data = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstateenerator,'from': "http://so.gushiwen.cn/user/collect.aspx",'email': "你自己的账户",'pwd': "你自己的密码",'code': result,'denglu': "登录"}# 自定义配置cookie信息:配置请求登录界面返回的cookie,以及配置请求图片链接返回回来的cookie,# 剩余三个cookie信息,可以查看登录请求找到规律。cookie = {response_get.cookies.keys()[0]: response_get.cookies.values()[0],response_get.cookies.keys()[1]: response_get.cookies.values()[1],img_res.cookies.keys()[0]: img_res.cookies.values()[0],"login": "false","Hm_lvt_9007fab6814e892d3020a64454da5a55": "1658748154","Hm_lpvt_9007fab6814e892d3020a64454da5a55": str(int(time.time())) # 这里获取的是当前的时间戳}print(cookie)# 发送登录post请求denglu_response = requests.post(url=denglu_url, headers=headers, data=data, cookies=cookie)# print(denglu_response.cookies)# print(denglu_response.text)# 保存登录结果页面。with open('./gerenxinxi.html', 'w', encoding='utf-8') as fp:fp.write(denglu_response.text)print(denglu_response.status_code)print(denglu_response.cookies.keys())print(denglu_response.cookies.values())

另解:

使用session保存会话,进行登录后多个界面数据的抓取工作。

import timeimport requests
from lxml import etree
from 第1部分python练习.第3章python爬虫.pachong_requests.第3章验证码.chaojiying.chaojiying import Chaojiying_Clientif __name__ == '__main__':headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'}# 创建一个session对象session = requests.Session()# 1、进行登录界面的请求url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'# response = requests.get(url=url,headers=headers).textresponse = session.get(url=url, headers=headers)with open('./denglu2.html', 'w', encoding='utf-8') as fp:fp.write(response.text)tree = etree.HTML(response.text)code_image_src = 'https://so.gushiwen.cn' + tree.xpath('//*[@id="imgCode"]/@src')[0]viewstate = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]viewstateenerator = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]print("第1次:session中的cookie值")print(session.cookies.keys())print(session.cookies.values())print("+++++++++++++++++++++++++")print(code_image_src)print(viewstate)print(viewstateenerator)img_res = session.get(url=code_image_src, headers=headers)img_content = img_res.contentprint("第2次:session中的cookie值")print(session.cookies.keys())print(session.cookies.values())print("+++++++++++++++++++++++++")with open('./gushiwen.jpg', 'wb') as fp:fp.write(img_content)# 解析验证码chaojiying = Chaojiying_Client('你的信息', '你的信息', '对应编号')  # 用户中心>>软件ID 生成一个替换 96001im = open('./gushiwen.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//# im = open('a.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//print(chaojiying.PostPic(im, 1902))  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()shibie_result = chaojiying.PostPic(im, 1902)result = shibie_result['pic_str']print("*" * 100)print(type(result))print('result:' + result)print("*" * 100)# 2、进行登录请求操作denglu_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'input = {'__VIEWSTATE': viewstate,# '__VIEWSTATEGENERATOR': "C93BE1AE",'__VIEWSTATEGENERATOR': viewstateenerator,'from': "http://so.gushiwen.cn/user/collect.aspx",'email': "你的账号",'pwd': "你的密码",'code': result,'denglu': "登录"}# session.cookies.set_cookie("login", "false")# session.cookies.set_cookie("Hm_lvt_9007fab6814e892d3020a64454da5a55", "1658748154")# session.cookies.set_cookie("Hm_lpvt_9007fab6814e892d3020a64454da5a55", str(int(time.time())))# denglu_response = requests.post(url=denglu_url,headers=headers,input=input)denglu_response = session.post(url=denglu_url, headers=headers, data=input)# print(denglu_response.text)with open('./gerenxinxi2.html','w',encoding='utf-8') as fp:fp.write(denglu_response.text)print(denglu_response.status_code)print("第3次:session中的cookie值")print(session.cookies.keys())print(session.cookies.values())print("+++++++++++++++++++++++++")# 名句页面数据获取detail_url = 'https://so.gushiwen.cn/user/collect.aspx?type=m&id=2501549&sort=t'detail_page = session.get(url=detail_url, headers=headers)detail_text = detail_page.textwith open('./mingju2.html', 'w', encoding='utf-8') as fp:fp.write(detail_text)

至此,完结。如有疑问,下面留言,博主看到第一时间回复。

使用python解决验证码登录并爬取登录后的个人界面:本篇以古诗文网站为例相关推荐

  1. 解决selenium模拟浏览器爬取(淘宝、微博等需要登陆验证的网站)多次登陆问题

    在爬取淘宝等需要登陆的网站时,模拟点击打开新的页面往往需要重新登陆,这时可以通过采用本地打开一个浏览器,设置监听端口,在该端口下模拟浏览器,这样浏览器会记住所有的用户行为,只要登陆过一次就不必重复登录 ...

  2. python爬虫 豆瓣影评的爬取cookies实现自动登录账号

    python爬虫 豆瓣影评的爬取cookies实现自动登录账号 频繁的登录网页会让豆瓣锁定你的账号-- 网页请求 使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具 ...

  3. 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算

    目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...

  4. educoder python入门之基础语法-用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...

    原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...

  5. python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错“ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连接”的问题

    python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错"ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连 ...

  6. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  7. 豆瓣用python写的网站_用python写一个豆瓣短评通用爬虫(登录、爬取、可视化)

    原创技术公众号:bigsai,本文在1024发布,祝大家节日快乐,心想事成. @ 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是 ...

  8. python不登陆爬取淘宝数据_python登录并爬取淘宝信息代码示例

    本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selen ...

  9. python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...

    原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...

最新文章

  1. (0009) iOS 开发之友盟统计分析SDK已全面支持HTTPS的更新
  2. es中发现结点的角色
  3. django_rest_framework之GenericAPIView(三)
  4. Hadoop的NameNode与SecondaryNameNode,DataNode
  5. Linux系统编程之进程控制(进程创建,fork函数,进程中止,进程等待,程序替换)
  6. 友盟页面访问路径全量统计功能上线啦!
  7. 141.4. 分布式安装(CentOS 6 + hadoop-1.1.2)
  8. python创建包含双引号的字符串代码_python 字符串组成MySql 命令时,字符串含有单引号或者双引号导致出错解决办法...
  9. gedit增加对指定文件格式(如qml)的识别和启用合适的语法高亮
  10. 疑难杂症篇(一)--安装Visio与已安装的office冲突的解决方案
  11. numpy随机抽样及各种分布函数详解
  12. 在字节跳动实习的真实感受究竟如何?
  13. BOM成本计算成最下级算到最上级
  14. 记YY的一次面试经历
  15. JavaScript中e.keycode详解
  16. JAVA 实现《捕鱼达人》游戏
  17. 修改app绕过模拟器检测_雷电模拟器(增强版)
  18. 5g发展趋势和未来前景,未来科技发展五大方向
  19. WordPress博客文章页如何添加OG协议标签
  20. 惠普战x适合计算机专业吗,惠普战x锐龙版怎么样?电脑值得入手吗?

热门文章

  1. shell shocked伴奏版_[原版伴奏]Ed Sheeran - Galway Girl (Karaoke)
  2. 当傻子的最好办法: 把别人当傻子
  3. 生产线平衡如何改善?详解:生产线平衡优化改善方法与措施!
  4. axios取消请求,取消前面一个或多个请求
  5. uni-app的分包下小程序报错app.json: [“tabBar“][1][“pagePath“]: “xxxx“ need in [“pages“]
  6. 管架标准图HG/T21629之恒力弹簧支吊架
  7. 最令程序员沮丧的 10 件事
  8. 世界这么大,Python 也想去看看
  9. 工作中常用且容易遗忘的css样式整理,建议收藏
  10. 总结:Spring Boot 之spring.factories