Как соскоблить сайт с разбитой на js страницей? - PullRequest
0 голосов
/ 13 мая 2019

Вот сайт: https://www.petco.com/shop/en/petcostore/brand/wholehearted.

Я хочу очистить содержимое каждой страницы. Я пытался сделать это с помощью BeautifulSoup, но я не могу привязать к URL, потому что pageNumber идет после «#». Поэтому я думаю об использовании selenium-webdriver, но я не знаю, как это реализовать.

У меня есть проект с BeautifulSoup.

import requests
from bs4 import BeautifulSoup

# header is made in order to model human behavior; 
# parameters are taken from Google Chrome, so it is better to use this script for Chrome browser
headers = { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
base_url = 'https://www.petco.com/shop/SearchDisplay?categoryId=&storeId=10151&catalogId=10051&langId=-1&sType=SimpleSearch&resultCatEntryType=2&showResultsPage=true&searchSource=Q&pageView=&beginIndex=0&pageSize=24&fromPageValue=search&searchKeyword=&searchTerm='
key_words = ['frontline', 'spot+on', 'ticks', 'anti+fleas', 'fleas', 'antiparasitic', 'pipette']

def petco_parse(base_url, headers):
    products = []
    urls = []
    for key in key_words:
        if base_url + key not in urls:
            urls.append(base_url + key)
    for url in urls:
        session = requests.Session()
        request = session.get(url, headers=headers)
        if request.status_code == 200:
            soup = BeautifulSoup(request.content, 'lxml')
            divs = soup.find_all('div', attrs={'class': 'product-name'})
            for div in divs:
                product_name = div.find('a').text.strip()
                product_url = div.find('a')['href']
                products.append({
                    'product_name': product_name,
                    'product_url': product_url
                    })
            if len(products) >= 100:
                break
            else:
                for product in products:
                    print(product)
        else:
            print('ERROR\nThe keyword ' + url[251:] + ' does not exist in this shop!')

def main():
    petco_parse(base_url, headers)

if __name__ == '__main__':
    main()

Я хочу реализовать очистку каждой страницы. Было бы замечательно, если бы существовало решение с использованием BeautifulSoup, но если нет, то селен-webdriver также хорош.

...