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

news/2024/5/20 23:53:51/文章来源:https://blog.csdn.net/banjiu4091/article/details/101377527

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_884642.aspx

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

相关文章

python requests模拟登陆带验证码的网站

作为之前专利爬虫的续篇&#xff0c;本篇准备描述如何通过python的requests模块登录专利查询网站。 环境准备 python 3.6requests chrome尝试 首先&#xff0c;我们使用chrome尝试登录专利网站&#xff0c;并通过network分析各个请求的相关信息。 通过分析network&#x…

如何在Microsoft Visual studio Ultimate 2012中安装配置Python 2.7和Diango1.5.1,并新建第一个网站

1.下载Python。 下载地址&#xff1a;https://www.python.org/downloads/windows/ 我的电脑是Windows 7 64位的操作系统&#xff0c;所以下载的是python-2.7.1&#xff11;.msi&#xff0c;下载步骤如下图&#xff1a; 其中&#xff0c;VS 2012对python的安装文件没有要求…

基于KNN算法的约会网站配对效果 python3.2

续前文 Python3.2 实现基于KNN算法的数据分类 。今天看完了《机器学习实战》中关于KNN算法的一个完整案例&#xff0c;将所有代码加了注释&#xff0c;并利用tkinter 将其改造为GUI式的交互界面。&#xff08;文中没有直接作用的方法我已经注释&#xff09; from numpy impor…

app和wap手机网站的区别在那里

app在大行其道的情况下&#xff0c;本人来发表关于app和手机wap网站的几个观点&#xff0c;希望对各位同仁有参考价值&#xff1a; 第一点 我们从依附的平台来看&#xff1a; 移动Wap网站&#xff1a;由移动设备的浏览器来支持&#xff0c;只要移动设备支持上网浏览网站基本上可…

Java Web学习十七:网站用户注册登录;预约信息

Java Web学习十七&#xff1a;网站用户注册&登录&#xff1b;预约信息 一&#xff1a;案例任务二&#xff1a;准备阶段三&#xff1a;代码分析与展示1.工具类的代码分析&#xff1a;2.注册功能代码分析 刚刚学习初期&#xff0c;我们写了网站用户的注册以及登录功能&#x…

黄阶中级-《大型网站技术架构》- 概述 - 修改0次

1、大型网站架构演化 互联网站的发展仅仅经历了 20 多年的时间。 大型网站软件系统的特点&#xff1a; 高并发、高流量。谷歌日均 PV 几十亿。 PV (访问量)&#xff1a;即 Page View , 即页面浏览量或点击量&#xff0c;用户每次刷新即被计算一次高可用。百度被黑就会成为热…

GCP搭建网站后403解决

由于开发需要&#xff0c;在本地用虚拟机配置了LNMP环境&#xff0c;使用的是Centos 6.8的yum安装&#xff0c;安装一切正常&#xff0c;但是使用默认的网站配置目录&#xff0c;是在/usr/share/nginx/html这个目录下。简直是有点奇葩了。 于是乎&#xff0c;我先将默认的配置…

【iPhone】网络编程–一起来做网站客户端(一)

http://www.pan-apps.com/?p281 最近几天&#xff0c;一直在学习网络编程方面&#xff0c;我觉得这是移动开发必须了解的知识吧 在实践中学习&#xff0c;才是最好的方法 于是就决定为公司OA系统做一个iphone客户端&#xff0c;但是前提是这个系统没有提供任何API,所以只能悲剧…

编程要趁早 BI推荐8个编程学习网站

http://www.cocoachina.com/applenews/devnews/2013/0329/5914.html 最近一个热门话题是雅虎以3000万美元收购了移动阅读应用Summly&#xff0c;真正让人吃惊的不是3000万美元的价格值不值&#xff0c;而是Summly的开发者--只有17岁的尼克达洛伊西奥。他12岁开始学习编程&#…

自动为 Gatsby网站中的 Markdown 页面添加 sidebar

0 简介 我想在Gatsby网站上创建Markdown页面时自动添加侧边栏。 有一个 starter “ gatsby-gitbook-starter” 可以支持markdown文件的侧边栏&#xff0c;但仅支持1级。 我希望能够支持更多级别。 你可以通过下面的命令安装这个starter。 gatsby new gatsby-gitbook-starter…

如何在标题栏title前添加网站logo?

第一种方法&#xff1a;据说在网站根目录下放着我们的ico型logo&#xff0c;命名为favicon.ico&#xff0c;浏览器会自动去找到并显示。试了试&#xff0c;在firefox23和ie8下都没有成功。 第二种方法&#xff1a;添加代码&#xff0c;如下&#xff1a; 1 <link rel"sh…

阿里云域名解析完成后仍然无法通过域名正常访问网站

通过阿里云进行域名解析后&#xff0c;仍然无法正常访问网站的解释&#xff0c;与解决办法 1、域名解析完成后&#xff0c;未在主机管理页面进行域名绑定。 域名绑定流程&#xff1a; 进入阿里云虚拟主机页面&#xff0c;找到相应的虚拟主机&#xff0c;点击后面的管理。 点击…

web页面性能优化以及SEO

前言&#xff1a; 在同样的网络环境下&#xff0c;两个同样能满足你的需求的网站&#xff0c;一个“Duang”的一下就加载出来了&#xff0c;一个纠结了半天才出来&#xff0c;你会选择哪个&#xff1f;研究表明&#xff1a;用户最满意的打开网页时间是2-5秒&#xff0c;如果等…

wordpress建站优化技巧

wordpress是一款开源的PHP博客程序&#xff0c;可以有大量的开源主题与插件&#xff0c;使用液非常简单&#xff0c;wordpress在全球范围应用都十分广泛&#xff0c;根据Pingdom.com最近发布的一份数据&#xff0c;2013年在Technorati排名前100的博客&#xff08;Technorati为一…

个人网站添加百度统计

网站如何添加百度统计&#xff1f; 上线网站后&#xff0c;需要进行网站的维护和及时观察网站的流量等方面去了解自己的网站&#xff0c;百度统计工具可以查看多少访客访问了网站&#xff0c;以及分析流量来源等情况。那应该如何为网站添加百度统计工具呢&#xff1f; 1、注册…

[转]50个c/c++源代码网站

[转]50个c/c源代码网站 Posted on 2010-03-05 14:59 feisky 阅读(1182) 评论(2) 编辑 收藏 所属分类: C/C C/C是最主要的编程语言。这里列出了50名优秀网站和网页清单&#xff0c;这些网站提供c/c源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C…

32个不应该做的JOOMLA SEO优化手法

32个不应该做的JOOMLA SEO优化手法 隐藏元件的方式有很多&#xff0c;這也是最常被誤用的SEO手法&#xff0c;但也是Google抓最兇的部分&#xff0c;所以你要避免&#xff1a; 1. 在白背景上使用白色文字 2. 藏字在圖的下方 3. 利用CSS隐藏文字 4. 用小字來建立鏈接以及增加…

Win7部署asp.net网站问题---HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败...

在IIS上部署网站时遇到这样一个问题&#xff1a;“ HTTP 错误 500.0 - Internal Server Error调用 LoadLibraryEx 失败&#xff0c;在 ISAPI 筛选器 "C:\Program Files (x86)\Sybase\PowerDynamo\win32\dyisa03.dll" 上”。 具体的问题展示如图&#xff1a; 通过网络…

高效在线抠图网站

介绍几款高效的抠图网站&#xff0c;给那些不想动手的。 1、怪兽抠图 链接: https://818ps.com/koutu/ 这是一个国内的站点&#xff0c;抠图后的图片不需要登录就能下载。 点击 上传图片 上传你需要抠图的素材。 用蓝色画出想保留的区域 用红色画出想要抠除的区域 - 简单…

VS2013 发布网站时文件丢失解决办法

网站发布时&#xff0c;发现一些模板文件没有复制到文件夹中解决办法&#xff1a;选择文件打开属性窗口找到生成操作&#xff0c;选项选择“内容”&#xff0c;然后重新发布 转载于:https://www.cnblogs.com/linyongqin/articles/6393166.html