Как сделать запрос post для вставки данных в поле веб-страницы

#python #pandas #web-scraping #http-post

#python #pandas #веб-очистка #http-post

Вопрос:

Я пытаюсь найти способ вставить некоторые сделки (которые я уже правильно отформатировал) в поле этого онлайн-калькулятора налога на прирост капитала в Великобритании — http://www.cgtcalculator.com/calculator.aspx — а затем нажмите на кнопку «Рассчитать», чтобы, наконец, получить информацию в окне результатов.

Пример некоторых сделок (не моих сделок) — эти данные в настоящее время находятся во фрейме данных:

 B   01/12/2000  BARC    3000    4.82    15.00   72.3
B   02/12/2000  BARC    5000    4.825   15.00   120.62
B   03/09/2002  VOD    18000    3.04    10.00   273.60
B   15/01/2003  BP.     5000    3.75    10.00   93.75
B   24/03/2003  BP.     3000    3.82    10.00   57.30
S   14/04/2003  BARC    6000    5.52    15.00   0.00
S   23/02/2004  VOD     9000    3.62    10.00   0.00
S   24/02/2004  VOD     9000    3.625   10.00   0.00
S   15/07/2005  BP.     8000    6.28    10.00   0.00
B   22/01/2007  BP.     5000    5.50    10.00   124.20
B   22/06/2009  BP.     2000    5.02    10.00   50.20
S   24/12/2012  BP.     5000    4.336   10.00   0.00
 

Когда я вставляю указанные выше данные в поле ввода и нажимаю «Формат / сортировка», я вижу, что они отображаются в исходном коде html как таковые:

 <textarea name="TEXTAREA1" id="TEXTAREA1" class="trades" cols="114"> 
"Trade Data Appears Here"
 

Затем, когда я нажимаю на кнопку «Рассчитать», появляется несколько <span> мигающих тегов. Результаты можно увидеть Network на вкладках and then Response .

Каков наилучший способ вставки данных о сделках в поле веб-страницы, нажатия кнопки «Рассчитать» и последующего получения результатов на Python? Будет post.request ли работать? Я просто следую некоторым рекомендациям здесь, поскольку я новичок в Python, но понимаю, что то, о чем я прошу, может быть невозможным или даже немного слишком сложным для меня.

Я пробовал следующее, но я только возвращаю содержимое веб-страницы.

 import requests
import pandas as pd

data = pd.read_csv("/Users/Test.csv")

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
url = 'http://www.cgtcalculator.com/calculator.aspx'
response = requests.post(url, data=data, headers=headers)
print(response.text)
 

Комментарии:

1. Вам либо нужно post указать адрес, на который calculator.aspx отправляется та же информация, либо вы хотите использовать пакет управления пользовательским интерфейсом, например, Selenium, чтобы вставить данные и нажать кнопку для вас.

2. @QuangHoang Спасибо за ответ. Прежде чем я начну работать с Selenium, как вы думаете, возможно ли на самом деле то, что я пытаюсь сделать?

3. С Selenium, конечно, вы просто автоматизируете взаимодействие с пользовательским интерфейсом, если только на веб-сайте нет какой-либо идентификации человека, например, CAPCHA. При requests.post этом вам может потребоваться передать правильные данные заголовка / авторизации.

4. @QuangHoang Это здорово, спасибо, да, я не думаю requests.post , что это сработает, поэтому я попробую Selenium!