当前位置: 首页 > 知识库问答 >
问题:

Python web scrape登录

苏晓博
2023-03-14

我是python新手,尝试使用xpath和请求登录并从这里提取一些数据,使用本教程中演示的方法。我的python脚本目前如下:

from lxml import html
import requests

url = "http://www.londoncoffeeguide.com/Venues/Profile/26-Grains"

session_requests = requests.session()
login_url = "http://www.londoncoffeeguide.com/signin?returnurl=%2fVenues"
result = session_requests.get(login_url)

tree = html.fromstring(result.content)
authenticity_token = list(set(tree.xpath("//input[@name='__CMSCsrfToken']/@value")))[0]

payload = {
    "p$lt$ctl01$LogonForm_SignIn$Login1$UserName": 'XXX', 
    "p$lt$ctl01$LogonForm_SignIn$Login1$Password": 'XXX', 
    "__CMSCsrfToken": authenticity_token
}

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'}

with requests.session() as s:
    p = s.post(login_url, data=payload, headers=headers)
    print(p.text)

不幸的是post请求的文本返回显示...

<head><title>
    System error
</title>

...然后显示登录页面的HTML的其余部分。我试着添加了上面所示的headers行,仔细检查了我使用的登录细节是否正确,并且我很高兴CMSCsrfToken是正确的,但是登录不起作用。这方面的任何帮助都是非常感谢的,我已经搜索过了,但是我发现的对类似问题的各种回应似乎都没有帮助(到目前为止!)

共有1个答案

邢飞白
2023-03-14

您将用户名密码放入了错误的字段。此外,在有效负载中要添加的附加字段很少,如viewstategeneratorviewstatee.t.c。以便使脚本工作。下面的脚本将使您登录,然后获取不同的配置文件项标题。

from lxml.html import fromstring
import requests

login_url = "http://www.londoncoffeeguide.com/signin?returnurl=%2fVenues"

username = "" #fill this in
password = "" #fill this in as well

with requests.session() as session:
    session.headers['User-Agent'] = 'Mozilla/5.0'
    result = session.get(login_url)
    tree = fromstring(result.text)
    auth_token = tree.xpath("//input[@id='__CMSCsrfToken']/@value")[0]
    viewstate = tree.xpath("//input[@id='__VIEWSTATE']/@value")[0]
    viewgen = tree.xpath("//input[@id='__VIEWSTATEGENERATOR']/@value")[0]

    payload = {
        "__CMSCsrfToken": auth_token,
        "__VIEWSTATEGENERATOR":viewgen,
        "p$lt$ctl02$pageplaceholder$p$lt$ctl00$RowLayout_Bootstrap$RowLayout_Bootstrap_2$ColumnLayout_Bootstrap1$ColumnLayout_Bootstrap1_1$LogonForm_SignIn$Login1$UserName": username, 
        "p$lt$ctl02$pageplaceholder$p$lt$ctl00$RowLayout_Bootstrap$RowLayout_Bootstrap_2$ColumnLayout_Bootstrap1$ColumnLayout_Bootstrap1_1$LogonForm_SignIn$Login1$Password": password, 
        "__VIEWSTATE":viewstate,
        "p$lt$ctl02$pageplaceholder$p$lt$ctl00$RowLayout_Bootstrap$RowLayout_Bootstrap_2$ColumnLayout_Bootstrap1$ColumnLayout_Bootstrap1_1$LogonForm_SignIn$Login1$LoginButton": "Log on"
    }

    session.headers.update({'User-Agent': 'Mozilla/5.0'})
    p = session.post(login_url, data=payload)
    root = fromstring(p.text)
    for iteminfo in root.cssselect(".ProfileItem .ProfileItemTitle"):
        print(iteminfo.text)

执行之前,请确保在脚本中填写usernamepassword字段。

 类似资料:
  • 容器在分派请求到 servlet引擎之前建立调用者身份。在整个请求处理过程中或直到应用成功的在请求上调用身份认证、登录或退出,调用者身份保持不变。对于异步请求,调用者身份建立在初始分派时,直到整个请求处理完成或直到应用成功的在请求上调用身份认证、登录或退出,调用者身份保持不变。 在处理请求时登录到一个应用,精确地对应有一个有效的非空的与请求关联的调用者身份,可以通过调用请求的 getRemoteU

  • 4.8.1 登出 现在我们来完成登出的功能。修改 routes/signout.js 如下: routes/signout.js const express = require('express') const router = express.Router() const checkLogin = require('../middlewares/check').checkLogin // G

  • 4.8.1 登出 现在我们来完成登出的功能。修改 routes/signout.js 如下: routes/signout.js var express = require('express'); var router = express.Router(); var checkLogin = require('../middlewares/check').checkLogin; // GET

  • 用户登录 调用地址 https://api.bilibili.tv/login 需要 App Key;此API调用权限需要额外申请,具体请联系网站客服。 参数 字段 必选 类型 说明 userid/email true string 帐号名或邮箱 pwd true string 明文密码 captcha true string 验证码 (请访问 https://secure.bilibili.tv

  • 作用 单点登录企业app、企业app H5等 依赖 获取单点登录前,员工的账户必须已经在滴滴,可使用员工添加接口将员工加入滴滴 注意 所有接口调用时需要严格遵守请求方式(GET/POST) 使用接口前需要仔细阅读每个接口的注意事项 接口报错时先阅读[通用错误解决方案][2]和当前接口文档下的接口错误解决方案

  • 3. 登录 打开云课堂 APP,通过扫描二维码或输入讲师登录地址的方式,选择课堂模式,进入课堂登录页面,输入昵称和密码,进入课堂房间。支持识别本地相册的二维码图片。 昵称 可自定义名称,名称将会在视频窗口及聊天中显示。 课堂密码 填写房间的讲师端登录密码。 线路切换 根据所在区域,切换线路。 横竖屏设置 根据直播场景,选择横屏或者竖屏。

  • 登陆 1. 在可连接互联网的环境轻触[PlayStation®Network]>[登陆]。 2. 输入在线ID与密码,并轻触[OK]。 登陆1次后即会保存在线ID与密码,以后将根据需要自动登陆。 无法连接网络时,可能会自动登出。 登出 若要手动登出,请轻触[PlayStation®Network]>[登出]。 若已手动登出,下次需要登陆时会显示登陆画面。请确认画面显示的内容,进行登陆操作。

  • 使用 sentry 在控制器里面,我们使用 sentry,需要在控制器顶部 use 以下 use Sentry 登陆 之 基于凭证登陆用户 首先,登陆非常简单,就是收集表单数据,验证表单数据,我们这里主要讲解怎么验证表单数据 看下面代码 $cred = [ 'email'=>Input::get('email'), 'pa