如何用 Python 爬取需要登录的网站?

news/2024/5/9 13:06:41/文章来源:https://blog.csdn.net/weixin_34130389/article/details/92416129

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作。它没有我想象中那么简单,因此我决定为它写一个辅助教程。

在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表。

教程中的代码可以从我的 Github 中找到。

我们将会按照以下步骤进行:

 

  • 提取登录需要的详细信息

  • 执行站点登录

  • 爬取所需要的数据

 

在本教程中,我使用了以下包(可以在 requirements.txt 中找到):

requests

lxml

步骤一:研究该网站

打开登录页面

进入以下页面 “bitbucket.org/account/signin”。你会看到如下图所示的页面(执行注销,以防你已经登录)

如何用 Python 爬取需要登录的网站?

如果你在学习Python的过程中遇见了很多疑问和难题,可以加-q-u-n   227 -435-450里面有软件视频资料免费

仔细研究那些我们需要提取的详细信息,以供登录之用

在这一部分,我们会创建一个字典来保存执行登录的详细信息:

1. 右击 “Username or email” 字段,选择“查看元素”。我们将使用 “name” 属性为 “username” 的输入框的值。“username”将会是 key 值,我们的用户名/电子邮箱就是对应的 value 值(在其他的网站上这些 key 值可能是 “email”,“ user_name”,“ login”,等等)。

如何用 Python 爬取需要登录的网站?

 

如何用 Python 爬取需要登录的网站?

 

2. 右击 “Password” 字段,选择“查看元素”。在脚本中我们需要使用 “name” 属性为 “password” 的输入框的值。“password” 将是字典的 key 值,我们输入的密码将是对应的 value 值(在其他网站key值可能是 “userpassword”,“loginpassword”,“pwd”,等等)。

如何用 Python 爬取需要登录的网站?

 

如何用 Python 爬取需要登录的网站?

 

3. 在源代码页面中,查找一个名为 “csrfmiddlewaretoken” 的隐藏输入标签。“csrfmiddlewaretoken” 将是 key 值,而对应的 value 值将是这个隐藏的输入值(在其他网站上这个 value 值可能是一个名为 “csrftoken”,“ authenticationtoken” 的隐藏输入值)。列如:“Vy00PE3Ra6aISwKBrPn72SFml00IcUV8”。

如何用 Python 爬取需要登录的网站?

 

如何用 Python 爬取需要登录的网站?

 

最后我们将会得到一个类似这样的字典:

payload = {

"username": "<USER NAME>",

"password": "<PASSWORD>",

"csrfmiddlewaretoken": "<CSRF_TOKEN>"

}

请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 key 值和 value 值。

步骤2:执行登录网站

对于这个脚本,我们只需要导入如下内容:

import requests

from lxml import html

首先,我们要创建 session 对象。这个对象会允许我们保存所有的登录会话请求。

session_requests = requests.session()

第二,我们要从该网页上提取在登录时所使用的 csrf 标记。在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。

login_url = "https://bitbucket.org/account/signin/?next=/"

result = session_requests.get(login_url)

tree = html.fromstring(result.text)

authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]

**更多关于xpath 和lxml的信息可以在这里找到。

接下来,我们要执行登录阶段。在这一阶段,我们发送一个 POST 请求给登录的 url。我们使用前面步骤中创建的 payload 作为 data 。也可以为该请求使用一个标题并在该标题中给这个相同的 url 添加一个参照键。

result = session_requests.post(

login_url,

data = payload,

headers = dict(referer=login_url)

)

步骤三:爬取内容

现在,我们已经登录成功了,我们将从 bitbucket dashboard 页面上执行真正的爬取操作。

url = 'https://bitbucket.org/dashboard/overview'

result = session_requests.get(

url,

headers = dict(referer = url)

)

为了测试以上内容,我们从 bitbucket dashboard 页面上爬取了项目列表。我们将再次使用 xpath 来查找目标元素,清除新行中的文本和空格并打印出结果。如果一切都运行 OK,输出结果应该是你 bitbucket 账户中的 buckets / project 列表。

tree = html.fromstring(result.content)

bucket_elems = tree.findall(".//span[@class='repo-name']/")

bucket_names = [bucket.text_content.replace("n", "").strip() for bucket inbucket_elems]

print bucket_names

你也可以通过检查从每个请求返回的状态代码来验证这些请求结果。它不会总是能让你知道登录阶段是否是成功的,但是可以用来作为一个验证指标。

例如:

result.ok # 会告诉我们最后一次请求是否成功

result.status_code # 会返回给我们最后一次请求的状态

就是这样。

转载于:https://my.oschina.net/u/3849396/blog/1932758

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

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

相关文章

[SakuraiYo][软工作业(4)]用户体验分析:以 “师路南通网站” 为例

一&#xff0e;页面初览&#xff08;“师路南通”、“UMU学习平台”、“学生安全教育平台”&#xff09; 1.“师路南通”页面初览。 *初览亮点&#xff1a;进入网站时的欢迎页面&#xff0c;不仅切合网站主题&#xff0c;且会变幻显示各类相关知识内容&#xff0c;会一定程度上…

简单动态网站搭建

如何在windows服务器上配置wordPress和discuz 网站建设中的概念讲解 网站建设的基础操作 网站程序的基础使用 网站程序的优化 简单动态网站搭建 软件部署域名和主机的购买 域名解析 环境部署 安装程序 软件的使用和优化 wordpress的基础设置和使用 discuz的基础设置…

超强的工具集合,只需要这一个网站足以!墙都不服我就只服它!

随着信息化时代的普及&#xff0c;很多功能性的网站如雨后春笋般出现&#xff0c;比如VIP解析、音乐搜索及影视观看等&#xff0c;但是这些网站只有屈指可数的几种功能&#xff0c;功能都比较单一。 今天给大家推荐一个功能强大到你无法想象的工具集合网站&#xff0c;拥有上百…

大学我都是自学走来的,这些私藏的实用工具/学习网站我贡献出来了,建议收藏精品推荐

作者 | Jeskson 来源 | 达达前端小酒馆 1 https://www.h5jun.com/archives/ 十年踪迹的博客 2 https://www.zhangxinxu.com/ 3 http://www.ruanyifeng.com/home.html 4 https://www.cnblogs.com/yexiaochai/ 5 https://www.cnblogs.com/rubylouvre/ 6 https://www.cnblogs.…

jar包下载网站

http://mvnrepository.com/ 【下载方式】 javadoc是文档&#xff08;可选&#xff09; sources是源代码&#xff08;可选&#xff09; jar可以通过外部引入加入工程的buildpath

IIS - 自动申请、部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议)

IIS - 自动申请、部署Lets Encrypt的免费SSL证书&#xff08;让网站实现HTTPS协议&#xff09; 2017-12-19发布&#xff1a;hangge阅读&#xff1a;161 一、HTTPS 协议介绍 1&#xff0c;什么是 HTTPS 协议&#xff1f; HTTPS&#xff08;全称&#xff1a;Hyper Text Transfer …

使用CSS3开启GPU硬件加速提升网站动画渲染性能

遇到的问题&#xff1a; 网站本身设计初衷就没有打算支持IE8及以下版本浏览器&#xff0c;并不是因为代码兼容性问题&#xff0c;而是真的不想迁就那些懒得更新自己操作系统和浏览器的用户&#xff0c;毕竟是我自己的网站&#xff0c;所以我说了算&#xff01;哈哈~ 没有了低版…

织梦怎么样备份网站

很多用织梦的朋友不知道怎么备份网站&#xff0c;还有些朋友备份网站的方式不对。当遇到网站被黑、服务器到期等关键时刻&#xff0c;导致数据丢失&#xff0c;网站不能用。新搭建网站就得一切从头再来&#xff0c;找技术恢复&#xff0c;又是一笔不小的开支。这是一种无形的损…

19期-当你在百度搜索关键字的时候,哪个网站会排在最前面?今天给大家科普一下“网站SEO”

前言 什么是SEO呢&#xff1f;SEO是Search Engine Optimization&#xff0c;意为“搜索引擎优化”&#xff0c;一般简称为搜索优化。对于SEO的主要工作就是通过了解各类搜索引擎如何抓取互联网页面&#xff0c;如何进行索引以及如何确定其对某一个特定关键词的搜索结果排名等技…

工具网站

http://tool.oschina.net/

技术整合网站

表格功能实现 1.阿里的easyexecl 数据导出功能实现 https://blog.csdn.net/weixin_38546942/article/details/87878983 2.Apache POI的实现方式 https://www.cnblogs.com/huajiezh/p/5467821.html

网站访问出现 ------ Can not write to cache files, please check directory ./cache/ .

2019独角兽企业重金招聘Python工程师标准>>> 最近在搞微商城时&#xff0c;突然出现了Can not write to cache files, please check directory ./cache/ .这样一个提示&#xff0c; 但最近好像没搞什么大动作&#xff0c;怎么回事&#xff0c;经过一番折腾&#xff…

从运维角度看中大型网站架构的演变之路

一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高性能等特性的&#xff0c;它是随着用户量和业务线不断增加&#xff0c;基础架构才逐渐健壮的。在发展初期&#xff0c;一般都是从0到1&#xff0c;不会一上来就整一些大而全的架构&#xff0c;也很少人这么任性。说…

网站作业不能粘贴

前两天学校发了一个网上作业&#xff0c;然后就想从网上找点东西借鉴一下&#xff0c;但是网站不让粘贴 又正好最近在学网站制作&#xff0c;就想尝试一下能否绕过这个这个。下面是尝试的几种方法。 直接禁止js 这是第一想法&#xff0c;直接禁止他的js运行&#xff0c; 果然能…

从零开始建站(四) - 后端项目搭建

简介&#xff1a; 这节聊一聊项目的后端&#xff0c;之前也讲过&#xff0c;因为对前端不熟悉&#xff0c;所以在前端花了太多的时间&#xff0c;导致到后端开发的时候搞的人有点疲&#xff0c;所以很多东西从简了&#xff0c;很多细节东西没有考虑&#xff0c;只想着把基本功能…

Ubuntu Nginx下配置网站ssl实现https访问

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在看 HTTP权威指南 看到介绍了HTTPS的ssl&#xff0c;自己就动手测试了下&#xff0c;将步骤记录下 HTTPS简介 什么是HTTPS&#xff1f;百科是这样解释的。HTTPS&#xff08;全称&#xff1a;Hyper Text Tran…

大型网站架构系列:负载均衡详解(1)(转)

面对大量用户访问、高并发请求&#xff0c;海量数据&#xff0c;可以使用高性能的服务器、大型数据库&#xff0c;存储设备&#xff0c;高性能Web服务器&#xff0c;采用高效率的编程语言比如(Go,Scala)等&#xff0c;当单机容量达到极限时&#xff0c;我们需要考虑业务拆分和分…

搜索关键词分析——以个人博客网站为例

背景 我做了一个个人博客网站&#xff0c;希望能够记录自己的学习&#xff0c;工作和成长笔记。同时为更多有相同需求的人提供帮助和支持。那么用户应该怎么来找到我这个博客网站呢&#xff1f;通过什么关键词能够快速找到这个博客网站呢&#xff1f; 接下来本文就来探讨一下关…

基于python的种子搜索网站,你懂得!

该项目是基于python的web类库django开发的一套web网站&#xff0c;给师弟做的毕业设计。本人的研究方向是一项关于搜索的研究项目。在该项目中&#xff0c;笔者开发了一个简单版的搜索网站&#xff0c;实现了对数据库数据的检索和更新。通过开发该项目&#xff0c;笔者学习和巩…