Мне было дано задание сделать все элементы со страницы 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()
Результаты показывают информацию об элементе, которая отображается во фрейме данных.