BeautifulSoup ничего не удаляет с веб-страницы - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над проектом по очистке веб-страниц. В этом проекте я пытаюсь очистить все ссылки на продукты на определенной странице в Amazon. этот процесс будет повторяться столько раз, сколько потребуется, и очистить несколько страниц от Amazon.

Вот мой код на данный момент

def scrape_pages(headers, product, num_of_pages):

    product_links = []

    for page in range(1, num_of_pages+1):

        url = f'https://www.amazon.com/s?k={product}&page={page}&ref=nb_sb_noss'
        print(url)

        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.content, features="lxml")
        data = soup.findAll('h2', attrs={'class':'a-size-mini'})

        for i in data:
            links = i.findAll('a')

            for a in links:
                product_links.append(f"https://www.amazon.com{a['href']}")
        print('TOTAL NUMBER OF PRODUCTS LINKS SCRAPPED: ', len(product_links))

    return product_links                                

В приведенном выше коде я пытаюсь очистить ссылки внутри всех тегов h2 на странице. Я использую пользовательский агент, чтобы сделать очистку возможной.

Моя проблема в том, что этот код не запускается все время. Иногда он очищает некоторые ссылки, а иногда и не очищает никакие ссылки.

На каждой странице amazon перечислено около 48 продуктов. Если бы мне пришлось очистить 5 страниц, то список product_links должен содержать где-то около 240 ссылок. но я провел несколько тестов, и это всегда меньше 200, а иногда и 0.

Я хочу знать, что я делаю неправильно

К вашему сведению, это пользовательский агент, который я использую

{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Я не уверен в этом, но столько же интернет-магазинов, как Amazon, размещают на веб-сайтах антибот-программы, которые могут остановить ваш поисковый робот. Эти розничные продавцы будут закрывать любые запросы от Beautiful Soup, поскольку он знает, что они поступают не из законных браузеров. Вместо этого вы можете использовать Selenium. Или поместите некоторые ограничения в свой код, например

time.sleep(1)

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

1 голос
/ 29 мая 2020

У меня была такая же проблема раньше. Вы можете использовать селен с BeautifulSoup.

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

...