Я пытаюсь просмотреть информацию с этой страницы с помощью Python: https://j2c-com.com/Euronaval14/catalogueWeb/catalogue.php?lang=gb. Меня особенно интересует всплывающее окно, которое происходит, когда вы нажимаете на имя отдельного участника выставки. Сложная часть - это использование большого количества JavaScript для вызова AJAX для загрузки данных.Извлечение содержимого из всплывающего окна AJAX onclick
Я рассмотрел сетевые вызовы при нажатии на экспонент и, кажется, что вызов AJAX идет к этому URL (для первого экспонента в списке «AIAD и MOD ИТАЛИИ»): https://j2c-com.com/Euronaval14/catalogueWeb/ajaxSociete.php?cle=D000365D000365&rnd=0.005115277832373977
I понять, где параметр cle
исходит из (id
с тегом <span>
), однако я не совсем понял, где находится параметр rnd
. Это просто случайное число? Я попытался предоставить случайное число с каждым запросом, но возвращенный html не содержит фактического содержимого всплывающего окна.
Это приводит меня к мысли, что либо атрибут rnd
не является случайным числом, либо мне нужен какой-либо тип cookie, чтобы фактические данные попадали в запрос.
Вот мой код до сих пор, я использую запросы и BeautifulSoup для разбора HTML:
import random
import decimal
import requests
from bs4 import BeautifulSoup
#base_url = 'https://j2c-com.com/Euronaval14/catalogueWeb/catalogue.php?lang=gb'
base_url = 'https://j2c-com.com/Euronaval14/catalogueWeb/cataloguerecherche.php?listeFavoris=&typeRecherche=1&typeRechSociete=&typeSociete=&typeMarque=&typeDescriptif=&typeActivite=&choixSociete=&choixPays=&choixActivite=&choixAgent=&choixPavillon=&choixZoneExpo=&langue=gb&rnd=0.1410133063327521'
def generate_random_number(i,d):
"Produce a random between 0 and 1, with 16 decimal digits"
return str(decimal.Decimal('%d.%d' % (random.randint(0,i),random.randint(0,d))))
r = requests.get(base_url)
soup = BeautifulSoup(r.text)
table = soup.find('table', {'id':'tableResultat'})
trs = table.findAll('tr')
for tr in trs:
span = tr.find('span')
cle = span.get('id')
url = 'https://j2c-com.com/Euronaval14/catalogueWeb/ajaxSociete.php?cle=' + cle + '&rnd=' + generate_random_number(0,9999999999999999)
pop = requests.post(url)
print url
print pop.text
break
Можете ли вы помочь мне понять, как я могу успешно захватить всплывающие данные, или то, что я» Неправильно? Спасибо заранее!
Спасибо за помощь! – Abundnce10
Похоже, я говорил слишком рано. Я попытался использовать request.session(), но по мере того как я прошел через каждое уникальное значение cle в параметрах URL, он отправил только первые данные экспонента (HTML выше). Если вы удалите 'break' из моего кода выше, вы получите другой результат по мере прохождения цикла' for tr in trs: '? – Abundnce10
@ Abundnce10 неприемлемый ответ был немного неправильным, так как ответ помог решить начальную проблему, которую вы имели. В любом случае, это была интересная задача - см. Раздел ответа UPD. Благодарю. – alecxe