Как получить доступ к содержимому div с Beautifulsoup? - PullRequest
0 голосов
/ 28 июня 2019

У меня Beautifulsoup запущен и работает, однако при разборе html для веб-сайта, на который я нацеливаюсь на объект «суп», похоже, не показывается div внутри div и так далее. Я пытаюсь получить информацию о товаре с веб-сайта, который имеет много слоев. При просмотре HTML-кода самого сайта я вижу, к какому слою я бы хотел добраться, но суп отображает только родительский div, который выглядит следующим образом:

<div id="react-views-container"></div>

как мне попасть внутрь этого div?

мой код выглядит следующим образом:

import urllib.request
import requests
from bs4 import BeautifulSoup

#setting up connection and testing by printig html
proxy_support = urllib.request.ProxyHandler("proxies_hidden_for_privacy")
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
html = urllib.request.urlopen("target_website").read()
print (html)

soup = BeautifulSoup(html)

div = soup.find(id="react-views-container")

1 Ответ

2 голосов
/ 28 июня 2019

Вы можете напрямую передать желаемый идентификатор div в приведенном ниже коде;

soup.find("div", {"id": "id-you-want"})

Это хорошо работает, когда вы хотите div внутри div

Или

Вы даже можете использовать это,

soup.find_all('div')

Это даст вам список всех div.Затем вы можете отфильтровать div, который вы хотите.

Edit ::

, проанализировав веб-сайт, мы видим, что он загружает элементы (элементы) динамически и, возможно, этоэто делается с помощью JavaScript и некоторых запросов XHR.

Решение

Эта проблема может быть решена, если вы используете scrapy или selenium, так как они используют веб-драйвер, так чтобыло бы легко отказаться от таких веб-сайтов, используя их вместо BeautifulSoup.

. Следующий возможный подход может состоять в том, чтобы найти URL-адреса (XHR / API), которые веб-сайт вызывает для получения элементов.

Примечание. Скоро я обновлю URL-адрес

Изменить 2:

Запрос

https://www.instacart.com/v3/containers/sprouts/search_v3/milk?source=web&cache_key=38e8f7-7370-t-35b&per=50&tracking.items_per_row=5&tracking.source_url=undefined&tracking.autocomplete_prefix=&tracking.autocomplete_term_impression_id=&tracking.search_bar_impression_event_id=

Это дает response содержащийэлементы в формате json.Вы можете удалить свои элементы из этого.

Невозможно добавить ответ, так как он большой по размеру, и моя вкладка Google Chrome начинает зависать LOL.Но я проверил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...