爬虫(二)requests 登陆某检索网站

news/2024/5/20 20:00:52/文章来源:https://blog.csdn.net/weixin_30548917/article/details/96419528

1
import requests 2 import os 3 from PIL import Image 4 import pytesseract 5 import re 6 7 rootUrl = xxx 8 # 构建登录页面url 9 loginUrl = rootUrl + '/sipopublicsearch/portal/uilogin-forwardLogin.shtml' 10 # 构建登陆页面headers 11 rootHeaders = { 12 'Cache-Control': 'max-age=0', 13 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 14 'Accept-Encoding': 'gzip, deflate', 15 'Accept-Language': 'zh-CN,zh;q=0.9', 16 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', 17 'Upgrade-Insecure-Requests': '1', 18 'Connection': 'keep-alive', 19 'Host': 'www.pss-system.gov.cn' 20 } 21 # 保持会话,建立session 22 s = requests.session() 23 # get 之后打印cookies,发现其中缺了一项cookie,这里手动添加 24 requests.utils.add_dict_to_cookiejar(s.cookies,{'avoid_declare':'declare_pass'}) # 使用utils.add_dict_to_cookiesjar()是保存到session里面 25 r =s.get(url=rootUrl,headers=rootHeaders,verify=False) # 在某段时间内可以一直存在 26 print(s.cookies.get_dict()) 27 # 请求 验证码链接 ,下载图片 28 # 构建验证码链接 29 verifyUrl = rootUrl + '/sipopublicsearch/portal/login-showPic.shtml' 30 # 构建请求验证码的headers 31 verifyHeaders = { 32 'Cache-Control': 'max-age=0', 33 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 34 'Accept-Encoding': 'gzip, deflate', 35 'Accept-Language': 'zh-CN,zh;q=0.9', 36 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', 37 'Upgrade-Insecure-Requests': '1', 38 'Connection': 'keep-alive', 39 'Host': rootUrl, 40 'Referer': rootUrl + '/sipopublicsearch/portal/uilogin-forwardLogin.shtml', 41 } 42 verifyCode = s.get(url=verifyUrl,headers=verifyHeaders,verify=False) 43 os.chdir(r'更改保存验证码图片路径') 44 with open('verifycode.png','wb') as f: 45 f.write(verifyCode.content) 46 f.close() 47 png = Image.open(r'verifycode.png') 48 # pip 出问题了 ,装不了 tesseract ,只能手动识别了 49 #verifycode = pytesseract.image_to_string(png) 50 #print('验证码为【{}】,'.format(verifycode),end='') 51 png.show() 52 mycode = input('请输入答案:') 53 54 # 提交表单的 第一个请求是 post ,然后从headers中取出 下一个跳转的url 55 # 先构建post的url, 其中参数 V 其实可以做成一个自动变化的参数,这里就不做了 56 jumpUrl = rootUrl + '/sipopublicsearch/wee/platform/wee_security_check?v=20180802' 57 jumpHeaders = { 58 'Cache-Control': 'max-age=0', 59 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 60 'Accept-Encoding': 'gzip, deflate', 61 'Accept-Language': 'zh-CN,zh;q=0.9', 62 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', 63 'Upgrade-Insecure-Requests': '1', 64 'Connection': 'keep-alive', 65 'Host': rootUrl, 66 'Referer': rootUrl + '/sipopublicsearch/portal/uilogin-forwardLogin.shtml', 67 'Origin': rootUrl, 68 'Content-Type': 'application/x-www-form-urlencoded', 69 'Content-Length': '108', 70 } 71 postData = { 72 'j_loginsuccess_url':'', # 这个值为空,用两个引号表示空值,不能换 None 哦!! 73 'j_validation_code':mycode, 74 'j_username':用户名, # 用户名和密码是加密过的,不过还好不是动态变化的加密,不然就麻烦了 75 'j_password':密码, 76 } 77 # post 请求 78 postResponse = s.post(url=jumpUrl,data=postData,headers=jumpHeaders,verify=False) 79 # 测试是否已经进爬取页面 80 from lxml import etree 81 html = etree.HTML(postResponse.text) 82 testEle = html.xpath('//div[@class="wrap-left"]/p/text()')[0] 83 print(testEle) # 这里已经显示 【 xxx用户名,欢迎访问!】 表示已经进入爬取页面了 84 85 # 可以像下面这样写到本地,方便自己查看,Txt还要注意 需要 编码成 utf-8 86 with open('content.txt','w',encoding='utf-8') as c: 87 c.write(postResponse.text) 88 c.close() 89 print(postResponse.status_code) 90 91 # 这下面的都不要了 ,因为上面就已经进去了,下面这段代码对应的响应位于【发送post请求】与【获取真正可以爬取页面】之间的跳转页面
92 ''' 93 # 获取响应中跳转的url 94 pattern = re.compile(r'<a href="(.*?)">') 95 reUrl = pattern.search(postResponse.text) 96 getUrl = reUrl.group(1) 97 print(reUrl.group(1)) 98 99 # 提交表单的第二次请求是 get , 100 # url:getUrl ; headers: jumpHeaders 101 print(s.cookies.get_dict()) 102 getResponse = s.get(url=getUrl,headers=jumpHeaders,verify=False) # 这里请求的cookies和 headers 应该是只能按它需要的发送,不能发多 103 print(getResponse.url) 104 print(getResponse.headers) 105 print(s.cookies.get_dict()) 106 # re2Url = pattern.search(getResponse.text) 107 # lastUrl = re2Url.group(1) 108 # print(re2Url.group(1)) # 得到 /sipopublicsearch/portal/uiIndex.shtml 109 # get2Url = nethost + lastUrl 110 111 # 进入真正的登陆后的页面 112 # 拿最后获取的 get2Url 进入登陆后页面 113 # lastResponse = s.get(url=get2Url,headers=jumpHeaders,verify=False) 114 # print(lastResponse.status_code) 115 # print(lastResponse.url) 116 '''

上面这段代码是登陆某检索网站的全部思路,其中对于登陆该网站而言真正有用的是【1~90行】,那为什么还有这么多呢?那是因为之前的经验蒙蔽了我得双眼,比如下面这两者情况:

第一种

 

第二种

【这里开始分析】: 以前碰到的是上图中第一种;那儿有两个框,分别标了1和2;2代表的是真正请求的爬取网站,1代表真正请求前跳转的网站,一般这种跳转网站字节少,上面箭头已给出对比;两个框里面的状态码 都是200,表示这都是有响应的,通常情况下,这种跳转网页的响应中都包含了真正请求爬取网站所需的参数或者cookie,因此要登陆这种有跳转的爬取网站都必须先去跳转网站获取数据;这里有难度的登陆网站【个人经验】会做以下几点:(1)将跳转网站链接参数用js加密,让大部分爬虫挂在这儿,(2)不加密跳转网站链接参数,转为js加密数据【哪些数据?那些在处理登陆问题时要用到的数据】(3)上述两个不全加密 (4 )【有哪些加密方法啊?这个我晓得几个,不过现在还无法搞定,等能搞定再写一篇解密】

  上图中第二种:框框共有4个,其中2和3明显属于页面跳转链接,于是经验使然,直接打开fiddler开始分析链接参数啊、下一步需要的数据啊,哎,发现两个都没有加密过,只是位置变来变去,ok,没什么大问题,搞定后开始将数据代入真正请求的爬取网址,代码开始运行....

然后就发现...好像将表单提交之后,就已经进入爬取页面了。 嗯??!! WTF ? 那我后面还搞了这么多,不是瞎搞啊 ? 什么情况呢?

然后就发现上图框框中标记的1、2、3、4啊,前面的状态码,不太对! 中间那两个302是什么意思? 呃 ? 忘了,然后baidu ,哦?302表示临时的url重定向url!! 原来是这样,难怪不用我自己发送请求,原来是多此一举【总结这个网站,呃,除了数据绕了点,好像其他没上什么高难度的操作,嗯,很友好我喜欢!!!】

【结语】此次目的就是登陆,因此写了登陆时测试的代码【呸,写的都是什么,这么乱还能叫代码?】,如果后续要爬取数据的话,思路是这样的:

1、加入ip代理【先测试一个ip能爬多少个,然后退出登陆,换headers,ip重新登陆再爬取,这样循环...】

2、引入线程【一个爬数据,一个存数据到本地(啥形式?随便。注意存的时候要查下重),主要是为了防止:一旦错误发生,数据全部丢失,又得重来】

3、如果有大量url,那就建个url管理器,并将url实时导入导出到本地【这样一旦发生错误,还可以从断开的url继续爬,虽然要牺牲些时间】

【最后】

【有一个问题求助:在某个链接的参数上遇到了【MmEwMD】这个js加密,求个例子解法】

转载于:https://www.cnblogs.com/Alexisbusyblog/p/9406779.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_818627.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress缓存插件使用提高网站速度

WordPress是世界上使用量最多的CMS&#xff0c;由于程序非常吃主机性能&#xff0c;正常情况下当页面被访问时&#xff0c;使用php和mysql。 因此&#xff0c;系统需要消耗RAM和CPU。 如果同一时间有大量访客访问&#xff0c;系统将使用大量的内存和CPU&#xff0c;所以页面加载…

网站访问量实时统计

一、需求&#xff1a;统计网站访问量&#xff08;实时统计&#xff09; 技术选型&#xff1a;特点&#xff08;数据量大、做计算、实时&#xff09;实时流式计算框架&#xff1a;storm1)spout 数据源&#xff0c;接入数据源 本地文件2)splitbolt 业务逻辑处理 切分数据 拿到网址…

Flask项目之手机端租房网站的实战开发(七)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 接着上一篇博客继续往下写 &#xff1a;https://blog.csdn.net/qq_41782425/article/details/85934776 目录 一丶登录后端接口编写 二丶登录接口测试…

Spring boot2.X 引入Feign框架 作为服务器间通信或访问其他网站的api

最近搞了个VueElement UI的网站&#xff0c;想做一个博客来记录一下生活和学习成果 网站的背景图片有点丑&#xff0c;就寻思用BIng的背景图。 后端Springboot一直没有做通信的封装&#xff0c;于是诞生了一个引用Springcloud的feign框架作为后端的通信框架。 pom.xml <?…

新手 搭建技术博客网站

本文可以让你了解到&#xff1a; 整个网站搭建到上线的流程。搭建网站的成本。网站域名&#xff0c;备案等细节。搜索引擎如何可以搜到你的网站。 一. 我的博客网站展示 Java架构师修炼 网站内容还在完善中&#xff0c;下面是我的文章数据库&#xff1a; 都是我一篇一篇写…

C# 使用GDI(Graphics)绘制 应用 网站 “登录验证码“

效果图&#xff1a; 有基础的直接看代码&#xff1a; 详细解读下面划 因为用户输入错误的时候 需要重制验证码 所以写成了一个方法 直接调用就可以了 注释备注的都非常清楚 Draw();string str string.Empty;//用用效验 输入的验证码是否正确private void Draw(){//这是一个…

JSP+XML构架网站的实例

XML&#xff08;可扩展标记语言&#xff09;看起来可能像某种W3C标准——现在没有什么实际影响&#xff0c;即使以后能派上用场&#xff0c;也是很久以后的事。但实际上&#xff0c;它现在已经得到了应用。所以&#xff0c;不要等到XML已被加进了你最喜爱的HTML编辑器中才开始使…

win7下iis配置网站外网无法访问

win7下&#xff0c;iis中配置好网站之后&#xff0c;在服务器上用内网ip是可以运行打开的&#xff0c;但是在局域网内缺打不开地址&#xff0c;如ip是20.0.0.300:6000 这样我们就需要看看是否是防火墙的配置了。 解决方案&#xff1a; 1、关闭防火墙&#xff0c;但是这样并不…

写一个对搜索引擎友好的文章SEO分页类--Java免费学习网

使用jsp/php/asp等动态程序生成的页面如何对搜索引擎友好呢&#xff1f;你可能想使用url_rewrite。不过&#xff0c;最好还是让同一个网址在任意时间对应的页面内容都是一样的或者相似的。因为搜索引擎不喜欢页面内容总是在变化的网址。 一般博客文章需要将新发表的文章显示在…

JSP动态网站开发环境配置详细方法

下面就以Tomcat作为JSP引擎&#xff0c;配合Tomcat、Apache、IIS这三种Web服务器来讲述3种搭建JSP运行环境的方案。 一、相关软件介绍 1、 J2SDK&#xff1a;Java2的软件开发工具&#xff0c;是Java应用程序的基础。JSP是基于Java技术的&#xff0c;所以配置JSP环境之前必须要安…

访问 https 网站时弹出 找不到任何证书

问题描述 Windows 7 64 位&#xff0c; IIS 7.5 的站点&#xff0c; 从腾讯云上申请&#xff08;亚洲诚信 TRSUSTASIA&#xff09; DV SSL 证书&#xff0c;然后在IIS中的服务器证书上导入证书文件&#xff0c;IIS 站点配置 HTTPS 进行访问&#xff0c;在安卓设备&#xff0c;…

Tomcat网站发布配置方案详细说明

关注微信号&#xff1a;javalearns 随时随地学Java 或扫一扫 随时随地学Java 修改端口、修改默认发布目录、多域名绑定 一、修改发布端口号为80&#xff08;Tomcat默认为8080&#xff09; 打开配置文件&#xff08;我的如下&#xff1a;E:\J2EEServer\Tomcat 6.0\co…

Tomcat网站发布配置方案详细说明

关注微信号&#xff1a;javalearns 随时随地学Java 或扫一扫 随时随地学Java 修改端口、修改默认发布目录、多域名绑定 一、修改发布端口号为80&#xff08;Tomcat默认为8080&#xff09; 打开配置文件&#xff08;我的如下&#xff1a;E:\J2EEServer\Tomcat 6.0\co…

网站图片路径的问题:绝对路径/虚拟路径

首先&#xff0c;图片和工程不在一个盘符下。图片也不能放到工程下。在JSP 文件中 <img src"C:/Users/fx/Pictures/test.jpg"/> 这样是引不到图片的。因为&#xff0c;JSP页面在引图片的时候是 在页面解析的路径是:<img src"http://localhost:8080/tes…

下载网站图片代码并且解析乱码

代码如下:// 获取网站对象 ServletContext context this.getServletContext(); // 获取网站资源 String path context.getRealPath("/imgs/人.jpg"); File file new File(path); System.out.println(file); // 设置响应头通知浏览器数据的处理方式 response.setHe…

奥运网站基本瘫痪状态,无法完成网上订票_manok_新浪博客

2007年10月30日上午9点&#xff0c;奥运官方网站http://www.tickets.beijing2008.cn&#xff0c;开始接受网上预订奥运门票&#xff0c;但是用户打开网站首页速度很慢&#xff0c;登录后搜索场次时&#xff0c;也是速度很慢&#xff0c;并可能无法响应用户的搜索请求&#xff0…

奥运网站基本瘫痪状态,无法完成网上订票

2007年10月30日上午9点&#xff0c;奥运官方网站http://www.tickets.beijing2008.cn&#xff0c;开始接受网上预订奥运门票&#xff0c;但是用户打开网站首页速度很慢&#xff0c;登录后搜索场次时&#xff0c;也是速度很慢&#xff0c;并可能无法响应用户的搜索请求&#xff0…

某大型购物网站暴露出的脑残一样的问题_manok_新浪博客

不用说了&#xff0c;请看下面截图&#xff0c;有这种网站出现&#xff0c;说明对顾客太负责任了&#xff0c;对于价格这种购物最关键的问题&#xff0c;出现此种矛盾和问题&#xff0c;暴露了商家的不认真&#xff0c;对网站质量控制上&#xff0c;测试上&#xff0c;流程上有…

某大型购物网站暴露出的脑残一样的问题

不用说了&#xff0c;请看下面截图&#xff0c;有这种网站出现&#xff0c;说明对顾客太负责任了&#xff0c;对于价格这种购物最关键的问题&#xff0c;出现此种矛盾和问题&#xff0c;暴露了商家的不认真&#xff0c;对网站质量控制上&#xff0c;测试上&#xff0c;流程上有…

图解网站系统架构原理图

简单&#xff1a; 复杂一些&#xff1a;