帖子网址是不正确的,你缺少的表单数据,你也需要做一个初始请求,后到正确的网址,然后得到http://pro.wialon.com/service.html
:
data = {"user": "demo",
"passw": "demo",
"submit": "Enter",
"lang": "en",
"action": "login"}
head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
with requests.Session() as c:
c.get('http://pro.wialon.com/')
url = 'http://pro.wialon.com/login_action.html'
c.post(url, data=data, headers=head)
print(c.get("http://pro.wialon.com/service.html").content)
你可以看到Chrome浏览器开发工具的帖子在网络选项卡下:
也是默认为post或get请求是允许重新导向,这样你就不需要在这里指定。
您可以在登录页面源代码看到,表单动作:
<form class="login_bg_form" id="login_form" action="login_action.html" method="POST">
而不是硬编码,我们可以从形式分析它的路径,使用BS4:
import requests
from bs4 import BeautifulSoup
from urlparse import urljoin
data = {"user": "demo",
"passw": "demo",
"submit": "Enter",
"lang": "en",
"action": "login"}
head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
with requests.Session()as c:
soup = BeautifulSoup(c.get('http://pro.wialon.com/').content)
redir = soup.select_one("#login_form")["action"]
url = 'http://pro.wialon.com/login_action.html'
c.post(url, data=data, headers=head)
print(c.get(urljoin("http://pro.wialon.com/", redir)).content)
现在唯一的问题是数据大多使用Ajax请求填充,所以如果你想抓取数据,你需要模仿请求。
您没有给我们足够的信息。告诉我们什么不起作用是一个好的开始。我知道的一件事是,这个网站,就像大多数网站一样,*可能*使用cookies,除非你传递了一个cookie jar与你的请求,否则你可能无法登录。 –
也我不知道你'重新尝试去做,但是如果你主要在登录后尝试做事情,你可以看看'browsercookie'模块。这将允许您使用Firefox/Chrome登录,然后以编程方式使用您在Web浏览器 –