Определение, является ли сайт интернет-магазином или нет - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь определить, есть ли веб-сайт из списка веб-сайтов, если интернет-магазин или нет.

Кажется, что большинство интернет-магазинов имеют:

  • тег a со словом 'cart' в их href
  • Тег li, назначенный классу со словом 'cart' в имени класса

Я полагаю, что мне придется воспользоваться преимуществами регулярных выражений, а затем сказать методу BeautifulSoup find, чтобы искать в данных HTML для этого регулярного выражения в теге a или li. Как мне поступить об этом?

Пока что приведенный ниже код ищет в данных HTML тег a с href ТОЛЬКО корзиной.

Код

import re
from bs4 import BeautifulSoup
from selenium import webdriver

websites = [
    'https://www.nike.com/',
    'https://www.youtube.com/',
    'https://www.google.com/',
    'https://www.amazon.com/',
    'https://www.gamestop.com/'
]
shops = []

driver = webdriver.Chrome('chromedriver')
options = webdriver.ChromeOptions()
options.headless = True
options.add_argument('log-level=3')

with webdriver.Chrome(options=options) as driver:
    for url in websites:
        driver.get(url)
        cart = re.compile('.*cart.*', re.IGNORECASE)
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        if soup.find('a', href=cart):
            shops.append(url)

print('\nSHOPS FOUND:')
for shop in shops:
    print(shop)

Выход:

SHOPS FOUND:
https://www.nike.com/
https://www.amazon.com/

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете использовать оператор содержит * с селекторами атрибутов css для указания атрибута класса или атрибут href содержит корзину для подстрок. Объедините два (class и href) с синтаксисом Or. TODO: Вы можете подумать о добавлении условий ожидания, чтобы вначале присутствовали все элементы тегов li и a.

from bs4 import BeautifulSoup
from selenium import webdriver

websites = [
    'https://www.nike.com/',
    'https://www.youtube.com/',
    'https://www.google.com/',
    'https://www.amazon.com/',
    'https://www.gamestop.com/'
]
shops = []

driver = webdriver.Chrome('chromedriver')
options = webdriver.ChromeOptions()
options.headless = True
options.add_argument('log-level=3')

with webdriver.Chrome(options=options) as driver:
    for url in websites:
        driver.get(url)
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        items = soup.select('a[href*=cart], li[class*=cart]')
        if len(items) > 0:
                shops.append(url)
print('\nSHOPS FOUND:')
for shop in shops:
    print(shop)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...