Web Scraping - парсеры BeautifulSoup не работают - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь извлечь название нескольких предметов из URL ниже. Узел и class_ указывают на правильный контент, но когда я использую find_all, я не получаю никаких результатов. Из предыдущих сообщений кажется, что эта проблема может быть связана с использованием неправильного парсера. Я использовал xml, lxml и другие, но ничего не работает.

Может ли кто-нибудь успешно извлечь содержимое?

import requests
from bs4 import BeautifulSoup
import pandas as pd
import html5lib
import urllib3


url_pb = 'https://www.pullandbear.com/it/uomo/accessori/zaini-c1030207088.html'
req_pb = requests.get(url_pb)
pars_pb = BeautifulSoup(req_pb.content, 'html.parser')
con_pb = pars_pb.find_all('div', class_ = 'name namorio')

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

ОБНОВЛЕНИЕ

Мне удалось найти необходимую информацию, скрытую в другом разделе того же кода, доступного для проверки. Я извлек их, используя этот код:

url_pb = 'https://www.pullandbear.com/it/uomo/accessori/zaini-c1030207088.html'
req_pb = requests.get(url_pb)
pars_pb = BeautifulSoup(req_pb.content, 'html.parser')
con_pb = pars_pb.find_all('li', class_ = False)

names_pb = [c.select("a > p")[0].text for c in con_pb]
prices_pb = [c.select('a > p')[1].text for c in con_pb]
picts_pb = [c.find('img').get('src') for c in con_pb]

df_pb = pd.DataFrame({'(Pull&Bear) Item_Name': names_pb,
                            'Item_Price_EUR': prices_pb,
                            'Link_to_Pict': picts_pb })
0 голосов
/ 05 ноября 2019

Кажется, что веб-сайт использует JavaScript для отображения своего контента. Это означает, что вы не можете напрямую посетить домашнюю страницу и удалить содержимое (так как requests не поддерживает веб-сайты, отображаемые на JavaScript) . При этом все данные, отображаемые на веб-сайте, отправляются в виде строки JSON, поэтому для получения всех названий элементов можно использовать следующий код:

import requests

url = "https://www.pullandbear.com:443/itxrest/2/catalog/store/24009405/20309428/category/1030207088/product?languageId=-4&appId=1"
all_products = requests.get(url).json()["products"]

product_names = [item["bundleProductSummaries"][0]["name"] for item in all_products]
print(product_names)

надеюсь, что этопомогает

...