Pandas DataFrame - Как извлечь строковые шаблоны из скрытых символов - PullRequest
0 голосов
/ 04 ноября 2019

Я соскребаю названия, цены и изображения с этого сайта . Всего их 8, но в DF я бы хотел отфильтровать только те элементы, которые содержат шаблон «Original Zaino Antifurto». Когда я пытаюсь применить bp_filter к DF, я получаю ошибку, возможно, из-за скрытых символов.

Кто-нибудь знает, как фильтровать этот шаблон, чтобы избежать ошибки?

import requests
from bs4 import BeautifulSoup
import pandas as pd

url_xd = 'https://www.xd-design.com/it-it/catalogsearch/result/?q=Bobby+Original+Zaino+Antifurto'
req_xd = requests.get(url_xd)
pars_xd = BeautifulSoup(req_xd.content, 'html.parser')
con_xd = pars_xd.find_all('div', class_ = 'product details product-item-details')

names_xd = []
prices_xd = []
picts_xd = []

for container in con_xd:
        name = container.find("a", class_="product-item-link").text
        names_xd.append(name)

for container in con_xd:
        price = container.find("span", class_="price").text
        prices_xd.append(price)

for container in con_xd:
        pict = container.find("a").get("href") 
        picts_xd.append(pict) 

bp_xd = pd.DataFrame({'(XD-Design) Item_Name': names_xd,
                            'Item_Price_EUR': prices_xd,
                            'Link_to_Pict': picts_xd })

bp_xd['Item_Price_EUR'] = bp_xd['Item_Price_EUR'].str.replace('€','').str.replace(',','.').astype(float)
bp_xd['(XD-Design) Item_Name'] = bp_xd['(XD-Design) Item_Name'].str.strip()

bp_filter = bp_xd['(XD-Design) Item_Name'][bp_xd['(XD-Design) Item_Name'].str.contains('Original Zaino Antifurto')]

# bp_xd[bp_filter]

1 Ответ

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

Здесь у вас есть фиксированный рабочий код

import requests
from bs4 import BeautifulSoup
import pandas as pd

url_xd = 'https://www.xd-design.com/it-it/catalogsearch/result/?q=Bobby+Original+Zaino+Antifurto'
req_xd = requests.get(url_xd)
pars_xd = BeautifulSoup(req_xd.content, 'html.parser')
con_xd = pars_xd.find_all('div', class_ = 'product details product-item-details')

names_xd = [c.find("a", class_="product-item-link").text for c in con_xd]
prices_xd = [c.find("span", class_="price").text for c in con_xd]
picts_xd = [c.find("a").get("href") for c in con_xd]


df = pd.DataFrame({'(XD-Design) Item_Name': names_xd,
                            'Item_Price_EUR': prices_xd,
                            'Link_to_Pict': picts_xd })

df['Item_Price_EUR'] = df['Item_Price_EUR'].str.replace('€','').str.replace(',','.').astype(float)
df['(XD-Design) Item_Name'] = df['(XD-Design) Item_Name'].str.strip()
df = df.loc[df['(XD-Design) Item_Name'].apply(lambda x: 1 if 'Original Zaino Antifurto' in x else 0) == 1]
...