我正在尝试通过网络抓取一个要求我登录的网站。 我使用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)