Как я могу очистить некоторые разделы div, которые не могут быть получены BeautifulSoup? - PullRequest
0 голосов
/ 22 января 2019

Я хочу получить информацию о компании из этого .

Раздел Div, связанный с данными, равен div class="col-xs-12 col-md-6 col-lg-6, но при запуске следующего кода для извлечения всех классов этот класс недоступен

import requests
from bs4 import BeautifulSoup

page = requests.get("http://gyeonquartz.com/distributors-detailers/")
soup = BeautifulSoup(page.content, 'html.parser')

print(soup.prettify())

Когда мы проверяем веб-источник, все детали дилера указываются под div class="col-xs-12 col-md-6 col-lg-6", но при разборе такого div нет.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Данные, которые вы хотите удалить, заполняются, когда страница загружается с помощью запроса AJAX. Когда вы делаете запрос через библиотеку запросов Python, вам предоставляется только страница html.

У вас есть 2 варианта.

  1. Используйте селен (или другие параметры, такие как request-html ), чтобы отобразить загруженное содержимое JavaScript.

  2. Непосредственно отправляйте запросы ajax и получайте ответ json. Вы можете найти это, используя вкладку сети в инструменте проверки в вашем браузере.

Второй вариант в этом случае выглядит следующим образом.

import requests
from bs4 import BeautifulSoup
import pandas as pd
page = requests.get("http://gyeonquartz.com/wp-admin/admin-ajax.php?action=gyeon_load_partners")
print(page.json())

Это выдаст очень длинный JSON. Я преобразовал его в DataFrame, чтобы лучше его просматривать.

import requests
from bs4 import BeautifulSoup
import pandas as pd
page = requests.get("http://gyeonquartz.com/wp-admin/admin-ajax.php?action=gyeon_load_partners")
df=pd.DataFrame.from_dict(page.json())
df['address'] = [BeautifulSoup(text,'html.parser').get_text().replace("\r\n","") for text in df['address'] ]
print(df) #just use df if in jupyter notebook

Пример вывода из моего ноутбука Jupyter выглядит следующим образом. enter image description here

0 голосов
/ 22 января 2019

Если вы посмотрите на исходный код страницы, то увидите, что ни один из тегов div, которые вы ищете, не существует в исходном коде страницы. Поскольку запросы делают только первоначальный запрос и не загружают никакого динамического содержимого, созданного с помощью javascript, искомые теги не содержатся в возвращенном html.

Чтобы получить динамический контент, вам вместо этого нужно имитировать любые запросы, которые делает страница (например, с помощью запроса curl) или загрузить страницу в браузере без заголовка (например, селене). Проблема не в парсере, а в контенте.

Очень похоже на решение для Как использовать запросы или другой модуль для получения данных со страницы, где URL-адрес не изменяется?

...