Я пытаюсь удалить таблицу этой веб-страницы (https://www.ftse.com/pr oducts / indexes / uk).Когда я проверяю страницу на вкладке Сеть, я вижу, что эта страница извлекает свои данные в API с AJAX-запросами (тип POST), которые выполняются браузером после загрузки макета.Поэтому я пытаюсь создать паука, который отправляет запросы POST на веб-страницу, используя данные формы, указанные в запросе.Я быстро протестировал следующую команду оболочки и получил данные.
curl 'https://www.ftse.com/products/indices/home/ra_getIndexData/' --data 'indexName=GEISAC¤cy=GBP&rtn=CAPITAL&ctry=Regions&Indices=ASX%2CFTSE+All-Share%2C%3AUKX%2CFTSE+100%2C%3AMCX%2CFTSE+250%2C%3AMCXNUK%2CFTSE+250+Net+Tax%2C%3ANMX%2CFTSE+350%2C%3ASMX%2CFTSE+Small+Cap%2C%3ANSX%2CFTSE+Fledgling%2C%3AAS0%2CFTSE+All-Small%2C%3AASXX%2CFTSE+All-Share+ex+Invt+Trust%2C%3AUKXXIT%2CFTSE+100+Index+ex+Invt+Trust%2C%3AMCIX%2CFTSE+250+Index+ex+Invt+Trust%2C%3ANMIX%2CFTSE+350+Index+ex+Invt+Trust%2C%3ASMXX%2CFTSE+Small+Cap+ex+Invt+Trust%2C%3AAS0X%2CFTSE+All-Small+ex+Invt+Trust%2C%3AUKXDUK%2CFTSE+100+Total+Return+Declared+Dividend%2C%3A&type='
Однако, когда я пытаюсь закодировать его на пауке с использованием классов FormRequest, паук терпит неудачу.
class FtseSpider(scrapy.Spider):
name = 'ftse'
#allowed_domains = ['www.ftserussell.com', 'www.ftse.com']
start_urls = [
'https://www.ftse.com/products/indices/uk']
def parse(self, request):
# URL parameters for the requst
data = 'indexName=GEISAC¤cy=GBP&rtn=CAPITAL&ctry=Regions&Indices=ASX%2CFTSE+All-Share%2C%3AUKX%2CFTSE+100%2C%3AMCX%2CFTSE+250%2C%3AMCXNUK%2CFTSE+250+Net+Tax%2C%3ANMX%2CFTSE+350%2C%3ASMX%2CFTSE+Small+Cap%2C%3ANSX%2CFTSE+Fledgling%2C%3AAS0%2CFTSE+All-Small%2C%3AASXX%2CFTSE+All-Share+ex+Invt+Trust%2C%3AUKXXIT%2CFTSE+100+Index+ex+Invt+Trust%2C%3AMCIX%2CFTSE+250+Index+ex+Invt+Trust%2C%3ANMIX%2CFTSE+350+Index+ex+Invt+Trust%2C%3ASMXX%2CFTSE+Small+Cap+ex+Invt+Trust%2C%3AAS0X%2CFTSE+All-Small+ex+Invt+Trust%2C%3AUKXDUK%2CFTSE+100+Total+Return+Declared+Dividend%2C%3A&type='`
# convert the URL parameters in to a dict
params_raw_ = urllib.parse.parse_qs(data)
prams_dict_ = {k: v[0] for k, v in params_raw_.items()}
# return the response
yield [scrapy.FormRequest('https://www.ftse.com/products/indices/home/ra_getIndexData/',
method='POST',
body=prams_dict_)]