Как загрузить страницу с отложенной загрузкой?

#python #web-scraping #urllib

#python #веб-очистка #urllib

Вопрос:

Мне нужно загрузить полную страницу и проанализировать ее, но она создает некоторые элементы с помощью JavaScript. Когда я пытаюсь сделать это с помощью help urllib, я получаю html-страницу без элементов с использованием JavaScript. Как я могу решить эту проблему?

 import urllib.request as urlib

page = urlib.urlopen('https://www.example.com')
soup = BeautifulSoup(page, 'html5lib')
...
  

Попытка:

 colordiv = soup.select("div.pswp__item:nth-child(1) > div:nth-child(1) > img:nth-child(1)'")[0]
  

С:

 https://www.electrictobacconist.com/smok-nord-p5831
  

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

1. можете ли вы указать URL-адрес и точно объяснить, что вам нужно?

2. ссылка выберите цвета colordiv = soup.select("div.pswp__item:nth-child(1) > div:nth-child(1) > img:nth-child(1)'")[0]

3. Используйте Selenium…

Ответ №1:

Несмотря на то, что страница отображается с использованием JavaScript, данные поступают через ajax-ответ в фоновом режиме. Все, что вам нужно сделать, это сделать этот запрос.

 import requests
import re
url='https://www.electrictobacconist.com/smok-nord-p5831'
#get 5831
product_id=re.findall(r'd ', url)[-1]
r=requests.get("https://www.electrictobacconist.com/ajax/get_product_options/{}".format(product_id))
print([x['value'] for x in r.json()['attributes'][0]['values']])
  

Вывод:

 ['Black/Blue', 'Black/White', 'Bottle Green', 'Full Black', 'Prism Gold', 'Prism Rainbow', 'Red', 'Resin Rainbow', 'Yellow/Purple', 'Blue/Brown', 'Red/Yellow', 'Red/Green', 'Black/White Resin']
  

Ответ №2:

Вы можете использовать инструменты разработчика, чтобы найти запрос, используемый для обновления значений цветов

 import requests

r = requests.get('https://www.electrictobacconist.com/ajax/get_product_options/5831').json()
colours = [item['value'] for item in r['attributes'][0]['values']]
print(colours)
  

введите описание изображения здесь