Как получить (webscrape) все товары с веб-сайта с несколькими категориями / подкатегориями? - PullRequest
0 голосов
/ 29 января 2019

Мне было дано задание сделать все элементы со страницы Officeworks, используя Selenium и несколько других пакетов на Python.

Дело в том, что у меня нет сильной основы с Python, и я не знаю, как создавать элементы из нескольких категорий.Я знаю только, как получить предметы из одной категории (которую я определяю), и я бы хотел получить все предметы из всего магазина.

Мой код показан ниже.

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
import selenium.webdriver.support.ui as ui
import selenium.webdriver.support.expected_conditions as EC
import os
import time
import pandas as pd
from bs4 import BeautifulSoup
import requests

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')

os.chdir("C:/Users/cameron.deng/Desktop/Scripts/python scraping")
cwd = os.getcwd()
main_dir = os.path.abspath(os.path.join(cwd, os.pardir))
print('Main Directory:', main_dir)

chromedriver = os.path.abspath(main_dir) + "/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver

browser = webdriver.Chrome(chrome_options=options, executable_path=chromedriver)
browser.get("https://www.officeworks.com.au/shop/officeworks/c/education/book/literacy-books")



lenOfPage = browser.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
match = False
while (match == False):
    lastCount = lenOfPage
    time.sleep(10)
    lenOfPage = browser.execute_script(
        "window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
    if lastCount == lenOfPage:
        match = True

page = browser.page_source
soup = BeautifulSoup(page, 'html.parser')



while True:
    time.sleep(10)
    res = pd.DataFrame()
    for sec in soup.findAll('div', attrs={'id': 'productList'}):
        for div in sec.findAll('div', attrs={'class': 'ow-product-tile product'}):
            pId = div["id"]
            pCatId = div["data-catentryid"]
            pTitle = div.findAll("img")[0]["alt"]
            temp = pd.DataFrame({'itemId': [pId], 'itemCatId': [pCatId], 'itemTitle': [pTitle]})
            res = res.append(temp)
        browser.find_element_by_css_selector('#paginationViewFullWidth > nav > ul > li.ow-pagination__next > a').click()

Результаты показывают информацию об элементе, которая отображается во фрейме данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...