Я пытаюсь автоматически обработать некоторые данные на веб-странице, используя пакет запросов Python, но я просто получаю «Response [403]» в качестве возвращаемого значения.Что я делаю неправильно?Вот минимальный (не) рабочий пример:
import requests
url = 'http://tools.iedb.org/mhcii/'
seq = "GGPKLRGNVTSNIKFPSDNKGKIIRGSNDKLNKNSEDVLEQSEKSLVSENVPSGLDIDDI"
form_data = {'sequence_text': seq,
'submit': 'submit'}
response = requests.post(url, data=form_data)
print(response)
Я также попытался дать ему дополнительный заголовок с информацией браузера, как предложено в здесь и здесь но ответ остается прежним.Идеи?
ОБНОВЛЕНИЕ:
Я включил предложения ниже, и ошибка 403 исчезла!Теперь веб-форма возвращает действительную htm-страницу, которая содержит сообщение «Вы должны выбрать аллель».Я не совсем уверен, что я делаю неправильно, так как в своем запросе я установил "allele_list":
import requests
url = 'http://tools.iedb.org/mhcii/'
seq = "GGPKLRGNVTSNIKFPSDNKGKIIRGSNDKLNKNSEDVLEQSEKSLVSENVPSGLDIDDI"
client = requests.session()
# retrieve the CSRF token
client.get(url) # sets cookie
if 'csrftoken' in client.cookies:
csrftoken = client.cookies['csrftoken'] # Django 1.6 and up
else:
csrftoken = client.cookies['csrf'] # older versions
form_data = {"sequence_text": seq,
"method": "1",
"sequence_format": "fasta",
"locus_list": "Human, HLA-DR",
"allele_list": "DRB1*01:01", # or HLA-DRB1*01:01
"sort_output": "MHC_IC50",
"output_format": "ascii",
"submit": "submit",
"csrfmiddlewaretoken": csrftoken}
header_data = {"Referer": url,
"User-Agent": "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"}
r = client.post(url, data=form_data, headers=header_data)
print(r.text)