我试图从这个网站中提取数据,但是我在运行session.post时得到了一个403号错误的响应。请参阅下面的代码以供参考。任何帮助都将不胜感激。
import requests
from bs4 import BeautifulSoup
import re
username = 'username'
password = 'password'
scrape_url = 'https://app.mapro.us/en/manage/owners/houses'
login_url = 'https://app.mapro.us/en/login'
login_info = {'login': username, 'pwd': password}
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive'
}
#Start session.
session = requests.session()
#Login using your authentication information.
p = session.post(url=login_url, data=login_info, headers=headers)
print(p)
发布于 2022-02-27 22:17:40
我没有用正确的login
和password
进行测试的帐户,但是在浏览器中检查它时有一些不同(在Firefox
中的DevTools
/在标签Network
中的Chrome
中)
主要区别是:
https://app.mapro.us/ajax?login=
POST
发送给地址如果我使用这个链接,那么我就可以得到200
和JSON
数据。
{
"status": 0,
"msg": "Authorization denied."
}
也许如果我有账户的话,它会给出不同的信息。
还有其他的差异,可能是重要的或不重要的。
POST
作为AJAX
发送,因此它有头部X请求-With‘:'XMLHttpRequest
JSON
的响应,所以它有不同的标题Accept
“‘Accept”:'application/json,text/javascript,*/*;q=0.01'
POST
POST
发送cookie SID
,这是在以前的GET
中获得的,因此您可能需要在session.get('https://app.mapro.us/en/login', ....)
之前运行session.get('https://app.mapro.us/en/login', ....)
顺便说一句:浏览器中的这个GET
总是得到403
,所以它似乎并不重要。
import requests
session = requests.session()
# --- GET ---
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
}
url_get = 'https://app.mapro.us/en/login'
p = session.get(url_get, headers=headers)
print(p)
#print(p.text)
print('Cookies SID:', session.cookies.get('SID'))
# --- POST ---
username = 'username'
password = 'password'
login_info = {'login': username, 'pwd': password}
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'application/json, text/javascript, */*; q=0.01', # expect JSON
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'X-Requested-With': 'XMLHttpRequest', # send AJAX
}
url_post = 'https://app.mapro.us/ajax?login='
p = session.post(url_post, headers=headers, data=login_info)
print(p)
print(p.text)
https://stackoverflow.com/questions/71288666
复制相似问题