Привет всем, у меня есть встроенный скрипт на python, использующий селен для бесконечной прокрутки и нажатия кнопки «загрузить больше», по-видимому, это дает мне только половину продуктов, а также отнимает много времени, и теперь я хочу написать скрипт в scrapy для того же самогополучить все ссылки на продукты в CSV-файле. Получить все ссылки на сценарии, которые я написал:
from selenium import webdriver
import time
from selenium.common.exceptions import WebDriverException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoSuchWindowException
path_to_chromedriver = 'C:/Users/Admin/AppData/Local/Programs/Python/Python37-32/chromedriver.exe'
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications": 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
browser = webdriver.Chrome(options=chrome_options, executable_path=path_to_chromedriver)
with open('E:/grainger2.txt','r', encoding='utf-8-sig') as f:
content = f.readlines()
content = [x.strip() for x in content]
with open('E:/grainger11.csv', 'a', encoding="utf-8") as f:
headers = ("link,sublink")
f.write(headers)
f.write("\n")
for dotnum in content:
browser.get(dotnum)
SCROLL_PAUSE_TIME = 1
# Get scroll height
last_height = browser.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = browser.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
while True:
try:
try:
loadMoreButton = browser.find_element_by_css_selector(".btn.list-view__load-more.list-view__load-more--js")
loadMoreButton.click()
time.sleep(2)
except NoSuchWindowException:
pass
except Exception as e:
break
try:
try:
for links in browser.find_elements_by_css_selector(".list-view__product.list-view__product--js"):
aa = links.get_attribute("data-url-ie8")
print(aa)
ana = "loadlink"
f.write(ana+","+dotnum+","+aa+"\n")
except NoSuchWindowException:
pass
except NoSuchElementException:
pass
Пример ссылки: https://www.grainger.com/category/drill-bushings/machine-tool-accessories/machining/ecatalog/N-hg1?searchRedirect=products
с использованиемСценарий выше, я получаю только 200 ссылок на продукты, но, тем не менее, ссылка содержит 9748 продуктов, и я хочу извлечь всю ссылку, если кто-то может мне помочь, это было бы очень полезно