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

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

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

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

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

  • 执行站点登录

  • 爬取所需要的数据

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

requests

lxml

#步骤一:研究该网站

打开登录页面

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

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

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

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

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

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

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

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
payload = {"username": "<USER NAME>","password": "<PASSWORD>","csrfmiddlewaretoken": "<CSRF_TOKEN>"}

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

#步骤2:执行登录网站

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

import requestsfrom 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

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

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

例如:

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

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

就是这样。

用Python爬取需要登录的网站相关推荐

  1. JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?

    最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作.它没有我想象中那么简单,因此我决定为它写一个辅助教程. 在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表. 教程中的代码可 ...

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

    最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作.它没有我想象中那么简单,因此我决定为它写一个辅助教程. 在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表. 教程中的代码可 ...

  3. python实现登录抓取_Python实现爬取需要登录的网站完整示例

    本文实例讲述了Python爬取需要登录的网站实现方法.分享给大家供大家参考,具体如下: import requests from lxml import html # 创建 session 对象.这个 ...

  4. 从入门到入土:基于Python爬取四川大学所有官方网站|狗头保命|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. 2019-03-20 Python爬取需要登录的有验证码的网站

    当你向验证码发起请求的时候,就有session了,记录下这次session 因为每当你请求一次验证码 或者 请求一次登录首页,验证码都在变动 验证码的链接可能不是固定的,可能需要GET/POST请求, ...

  6. 第10课:利用Headers 的 cookie,实现爬取需要登录的网站信息

    本节课目录: Cookie 的概念: 网站 Cookie 的获取方法 : Cookie 访问登录网站演示: 实战演习: Cookie 安全: 本节课总结: Cookie 的概念: Cookie 是储存 ...

  7. python爬取安居客二手房网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  8. python爬取安居客二手房网站数据(转)

    之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...

  9. python爬取下载动态图片网站

    这次我们来爬取一个图片网站 unsplash.com,为什么要选择这个网站呢?因为这个网站的所有图片都是js动态请求生成的,所以说一般的爬取肯定是不行的啦 ~ 一.工具 这次爬取我们需要借助一款工具代 ...

最新文章

  1. freemarker基本语法及实例
  2. mac os x java_Mac OS X和多个Java版本
  3. 2.2.4 RMSprop
  4. JAVA自动补全插件
  5. 转元组 python_Python基础教程,第三讲,列表和元组
  6. c#象棋程序_C ++程序确定象棋方块的颜色
  7. acm括号配对问题c语言,ACM:UESTC - 649 括号配对问题 - stack
  8. python中scale的用法_Tkinter Scale滑块组件的用法
  9. java知识总结-25
  10. 【网络安全工程师面试合集】—邮件协议是如何被安全人员利用的?
  11. EdrawMax安装方法步骤
  12. VIVO X5M手机ROOT权限获取方法
  13. 抽象代数 01.06 变换群与置换群
  14. Android开发:指南针(基于手机传感器)
  15. 腾讯云轻量应用服务器地域节点北京、上海和广州选择攻略
  16. php 生成单色位图,使用PHP实现将jpg/png转成.wbmp/.bmp格式图片后再转为16进制字符串(单色位图取模)...
  17. 关于inet addr(网络地址)、bcast(广播地址)、mask(子网掩码)的学习
  18. 怎么安装iso服务器系统安装win7系统,win7纯净版iso怎么安装
  19. Excel导出(浏览器下载器下载导出Excel)
  20. mac 苹果电脑升级系统后蓝牙耳机只有一边有声音 苹果电脑连接耳机音质不好 苹果电脑浏览网页音视频嘈杂

热门文章

  1. 遥感图像存储格式BSQ/BIL/BIP
  2. 前端角度如何做好SEO
  3. 设计模式的原则和常用的模式
  4. (七)集成学习中-投票法Voting
  5. 移动固态硬盘删除分区(包括EFI分区)
  6. python执行cmd命令,并获得返回值
  7. 使用Matlab对频繁2项集和频繁3项集的求取
  8. 虚拟机IC617 REHAT导入工艺库操作
  9. Seaching TreeVIew WPF
  10. SAP中质量订单未维护结算规则导致月结报错的分析解决案例