1

我正在使用 Python 和 Requests 模块以及 BeautifulSoup 编写一个 AliExpress 网络爬虫,我让它运行良好,但是我遇到了一个问题 - 我被随机重定向到登录页面。我对此的解决方案是在抓取之前在会话开始时简单地登录,但我不知道如何登录。

登录页面 ( https://login.aliexpress.com ) 只需要用户名和密码,但是当我尝试使用我的代码输入它们并测试以查看我是否通过转到https://home 登录时。 aliexpress.com/index.htm并查看 html,它失败了,因为它将我重定向回登录页面。

尝试多种解决方案无济于事后我的代码:

import requests

LOGIN_URL = "https://login.aliexpress.com/"
LOGIN_INFO = {
    "loginId": "myemail@email.com",
    "password": "mypassword"
}


with requests.Session() as sess:
    #go to login page
    sess.get(LOGIN_URL)

    #attempt to log in with my login info
    sess.post(LOGIN_URL, data=LOGIN_INFO)

    #go to 'My AliExpress' page to verify successful login
    success = sess.get("https://home.aliexpress.com/index.htm")

    #manually check html to see if I was sent to the login page again
    print(success.text)

这几乎是我多次尝试失败后剩下的东西。我尝试过的一些事情是:

  1. 在 'sess.get(LOGIN_URL)' 之后查看 cookie,它会返回此信息,但我不知道如何处理它(以键:值格式):

    • ali_apache_tracktmp :
    • ali_apache_track:
    • xman_f : t52Eyo+p3qf6E6fdmL5yJ81g2icRn+2PYjjrWYHlqlDyXAixo92Z5KHMZV8SCV7vP4ZjxEmuTQesVWkqxUi3SpFU1qbRyNRd+d0pIIKVhrIDri2oaWrt6A==
    • JSESSIONID:30678741D7473C80BEB85825718FB1C6
    • acs_usuc_t:acs_rt=343aef98b0ca4ae79497e31b11c82c29&x_csrf=1b5g78e7fz2rt
    • xman_us_f : x_l=0
    • ali_apache_id : 23.76.146.14.1510893827939.187695.4
    • xman_t : PSIYMbKN2UyuejZBfmP9o5hdmQGoSB0UL0785LnRBxW0bdbdMmtW2A47hHbgTgD7TmFp7QVsOW4kXTsXMncy+iKisKfqagqb4yPxOVFdw+k=
  2. 尝试查找 csrf 令牌,但仅在上面第 5 个项目符号中的 '_csrf=' 之后找到了文本。尝试使用它并没有用。

  3. 查看了您登录时发送的 html 表单,但我不知道 html,只能识别它的字段比我看到的其他人用于其他网站的字段多得多(此处 Chrome 的表单数据图像)

  4. 将我的代码中的“myPassword”更改为上图中password2字段中的文本,并将“password”键也更改为“password2”。

  5. 谷歌搜索了几个小时,但没有找到任何可行的方法。

在这一点上,我束手无策,因此非常感谢任何有关如何进行的帮助。我不是最好的编码器(仍在学习),除了我从一些关于抓取的教程中学到的东西之外,我不知道 html,并希望自己弄清楚,但几个小时后我仍然没有解决它并意识到我真的可以使用帮助。

我正在使用python 3.5。如果需要更多信息,请告诉我。在被卡住和清醒这么久之后,大脑几乎完全变成了糊状。

4

1 回答 1

0

我怀疑这不会按您希望的方式工作。即使在以某种方式完成登录提示之后,以下页面也会显示“滑块验证”,据我所知,请求无法对此做任何事情。(如果有方法请告诉我)。

我一直在尝试使用 cookie:

session = requests.Session()
cj = requests.cookies.RequestsCookieJar()
cj.set('KEY', 'VALUE')
session.cookies = cj
response = session.get(url, timeout=5, headers=headers, proxies=proxies)

以前刮板使用标题和代理工作了一段时间,但最近它总是提示登录。我也尝试了 cookie 中的所有键和值,但无济于事。

一个想法是使用 selenium 登录并捕获 cookie,然后将其传递给请求会话。

AntoG有一个解决方案: https ://stackoverflow.com/a/42114843

于 2019-11-04T07:06:51.200 回答