没有名称属性时,如何使用requests.session.post?

时间:2019-10-24 20:12:29

标签: python web-scraping

我正在尝试通过网络抓取一个要求我登录的网站。 我使用python来完成这项工作,但是代码无法执行登录过程。我得到的是登录失败时得到的结果。

我发现我们需要在html代码中使用name属性作为登录信息字典的键,该键是request.session.post()的输入。

例如,Zara的登录页面具有名称​​属性“ email”和“ password”,如下所示:

<input id="email" name="email" type="text" value="" autocomplete="off" class="validation-ok" aria-invalid="false">
<input id="password" name="password" type="password" value="" autocomplete="off" class="validation-ok" aria-invalid="false">

我无法使用它,因为在检查chrome站点时看不到它。我相信我无法在Python中执行登录,因为我没有使用name属性作为登录信息字典的键。该网站的相关html代码如下:

<input type="text" class="form-control" id="email" placeholder="Email" required="" autofocus="">
<input type="password" class="form-control" id="pw" placeholder="Password" required="">

我的问题是,当html代码中没有任何名称属性时,如何编写登录信息字典?

我为Zara网站测试了我的代码,该代码具有名称属性以刮擦个人帐户页面,并且效果很好。唯一的区别是我可以为此使用name属性。

import requests
from bs4 import BeautifulSoup

#login information
email = "fakeid@site.com"
password = "fakepassword"
login_info = {"email": email, "pw": password}

#url information
login_url = "https://fakesite.com/admin"
scrape_url = "https://fakesite.com/admin/manageUser"

session = requests.session()

# Perform login
session.post(url=login_url, data=login_info)
response = session.get(url=scrape_url)

#Scrape url
html = response.content
print(html)

soup = BeautifulSoup(html, "html.parser")

for link in soup.findAll('a'):
    print('Link href: ' + link['href'])
    print('Link text: ' + link.text)

1 个答案:

答案 0 :(得分:0)

这是一个带有json有效负载的帖子,看起来像一个csrf令牌:

enter image description here

对于您来说,这可能太难了,在这种情况下,请切换到硒。