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

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

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

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

提取登录需要的详细信息

执行站点登录

爬取所需要的数据

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

requests

lxml

步骤一:研究该网站

打开登录页面

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

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

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

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

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”。

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

payload = {

"username": "",

"password": "",

"csrfmiddlewaretoken": ""

}

请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 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 # 会返回给我们最后一次请求的状态

就是这样。

JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?相关推荐

  1. python爬取微信好友_如何用 Python 爬取自己的微信朋友

    原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...

  2. python爬取网页公开数据_如何用Python爬取网页数据

    使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...

  3. 如何用python爬取图片数据_如何用python爬取图片

    都知道Python的语法很简单易上手,也很适合拿来做爬虫等等,这里就简单讲解一下爬虫入门--简单地爬取下载网站图片. 代码: 其实很简单,我们直接看下整体的代码:#coding = utf-8 imp ...

  4. python爬取小游戏_如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)...

    简介: Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学习效率 ...

  5. 用python写注册登录_如何用python 写注册,登录功能的测试

    2015-07-09 回答 有些网页需要你登录之后才可以访问,你需要提供账户和密码. 只要在发送http请求时,带上含有正常登陆的cookie就可以了. 1.首先我们要先了解cookie的工作原理. ...

  6. python租房_如何用Python爬租房网站信息

    展开全部 首先你需要了解如何用python进行爬虫,然后需要了解正则或者找寻条件的方法,给你62616964757a686964616fe4b893e5b19e31333337383839举个例子: ...

  7. python爬实时数据_如何用python爬取实时更新的动态数据?

    爬虫实时更新 互联网是绝对豪爽的数据源.不幸的是,倘若没有轻易构制的CSV文献可供下载和说明,则绝大部门.倘若要从很众网站拘捕数据,则必要测验举办收集抓取. 倘若您照样一个初学者,请不要忧愁-正在数据 ...

  8. python爬取企业电话_如何用python抓取爱企查企业信息

    前段时间,经理让我去找一些企业的信息,我平常习惯于使用爱企查.所以,便想着写一个程序来实现这个,所以有以下的代码:import json import requests import re from  ...

  9. python爬取付费隐藏内容_如何用python 爬取网页中隐藏的div内容?

    图片所在的html元素id叫 viewimg ,这个元素是由 view.js 当中的 loadview 函数创建的.该函数吧serverurl跟photosrc这个array里头的元素拼接,并把他设置 ...

最新文章

  1. 傲游浏览器---自定义 UserAgent 字符串
  2. 深度学习(三十)——Deep Speech, 自动求导
  3. 光端机常见故障问题及其解决方案
  4. hdu 1325 Is It A Tree?
  5. 展望未来计算机可以分为哪几种类型,大学计算机基础-计算机概述.ppt
  6. python获取未读邮箱数目_python imaplib 获取未读邮件,email解析并按照原名下载附件...
  7. nodejs笔记之流(stream)
  8. Django笔记 —— 模型高级进阶
  9. 常见职位的英文简称_英语面试常见的50大问题及应对技巧
  10. win10固态硬盘分区 整数_固态硬盘先装系统还是先4k对齐?
  11. 【毕业设计】基于stm32的万能红外遥控器 - 单片机 嵌入式 物联网
  12. 几何求交(一):直线和直线的交点
  13. 推荐9个强大的谷歌插件,程序猿必备!不看后悔系列!
  14. java 短链跳转原理_短连接跳转的原理
  15. 【全自动网盘扩容软件使用教程】百度网盘自助无限扩容+自助无限修复软件使用步骤说明
  16. 服务器支持安装显卡吗,如何在2U服务器里装显卡
  17. js 如何获取浏览器的高度和宽度
  18. 电子工程师入门宝典:最常用十大电子元器件-电子技术方案|电路图讲解
  19. 批量添加Exchange邮件联系人
  20. 用python实现身份证号校验系统

热门文章

  1. 从零双排java之转换流
  2. win10 系统版本号获取的三种方法
  3. 笔记本启动显示0xc000014c错误--提示缺失win10/system32内部文件
  4. VC 模拟鼠标和键盘输入
  5. ❤️❤️马上安排!闺女想在游戏里成为【超人】,Python游戏开发模块Pygame系列之【跳跃的小球】❤️❤️源码
  6. vue 视频截图获取第一帧或者某一帧
  7. 【数理统计】概率统计
  8. sys_guid()函数解析
  9. mysql vtype_ExtJs6学习笔记 -- 自定义 vtype
  10. 关于装msdn网站纯净版win7正版授权问题(已解决)