У меня есть следующий список строк, но я хочу применить фильтр, чтобы я мог определенный элемент из списков. Как это сделать? - PullRequest
2 голосов
/ 07 апреля 2019

Я пытаюсь получить данные изображения со следующего веб-сайта .

Однако я получаю список данных, который содержит ненужные ссылки. Я хочу применить фильтр, чтобы получить только те данные, которые начинаются с / PIAimages . Как применить фильтр для этого?


    import requests
    from bs4 import BeautifulSoup
    import csv 

    result = []
    response = requests.get("https://www.ikea.com/sa/en/catalog/products/00361049/")
    assert response.ok
    page = BeautifulSoup(response.text, "html.parser")

    for des in page.find_all('img'):
       image= des.get('src')
       print(image)


Ожидаемый результат:

/PIAimages/0531313_PE647261_S1.JPG
/PIAimages/0513228_PE638849_S1.JPG
/PIAimages/0618875_PE688687_S1.JPG
/PIAimages/0325432_PE517964_S1.JPG
/PIAimages/0690287_PE723209_S1.JPG
/PIAimages/0513996_PE639275_S1.JPG
/PIAimages/0325450_PE517970_S1.JPG

Фактическая выработка:

/ms/img/header/ikea-logo.svg
/ms/en_SA/img/header/ikea-store.png
/ms/img/header/main_menu_shadow.gif
/sa/en/images/products/strandmon-wing-chair-beige__0513996_PE639275_S4.JPG
/PIAimages/0531313_PE647261_S1.JPG
/PIAimages/0513228_PE638849_S1.JPG
/PIAimages/0618875_PE688687_S1.JPG
/PIAimages/0325432_PE517964_S1.JPG
/PIAimages/0690287_PE723209_S1.JPG
/PIAimages/0513996_PE639275_S1.JPG
/PIAimages/0325450_PE517970_S1.JPG
/ms/img/static/loading.gif
/ms/img/static/stock_check_green.gif
/ms/img/ads/services/ways_to_shop/20172_otav20a_assembly_20x20.jpg
/ms/en_SA/img/icons/picking-with-delivery.jpg
/ms/img/ads/services/ways_to_shop/20172_otav24a_pickingdelivery_20x20.jpg
/sa/en/images/products/strandmon-wing-chair-beige__0739100_PH147003_S4.JPG
https://smetrics.ikea.com/b/ss/ikeaallnojavascriptprod/5/?c8=sa&pageName=nojavascript

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Использование предложения If, добавление данных в список.

import requests
from bs4 import BeautifulSoup

result = []
response = requests.get("https://www.ikea.com/sa/en/catalog/products/00361049/")
assert response.ok
page = BeautifulSoup(response.text, "html.parser")
for des in page.find_all('img'):
    image= des.get('src')
    if 'PIAimages' in image:
        result.append(image)

print(result)

ИЛИ используйте регулярные выражения. Это намного быстрее.

import requests
import re
from bs4 import BeautifulSoup

result = []
response = requests.get("https://www.ikea.com/sa/en/catalog/products/00361049/")
assert response.ok
page = BeautifulSoup(response.text, "html.parser")
for des in page.find_all('img', src=re.compile("PIAimages")):
    image= des.get('src')
    result.append(image)

print(result)
0 голосов
/ 07 апреля 2019

Я думаю, что быстрее и более кратко использовать css attribute = value селектор с запуском с оператором. Вы указываете стартовую подстроку для src в селекторе, поэтому возвращаются только подходящие элементы.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://www.ikea.com/sa/en/catalog/products/00361049/")
page = BeautifulSoup(response.text, "lxml")   
images = [item['src'] for item in page.select('img[src^=\/PIAimages]')]
print(images)
...