Доступ запрещен при очистке сайта с селеном в Python - PullRequest
0 голосов
/ 21 мая 2018

Привет. Я пытаюсь извлечь информацию с веб-сайта Macy, в частности, из этой категории = 'https://www.macys.com/shop/featured/women-handbags'. Но когда я захожу на страницу конкретного элемента, я получаю пустую страницу со следующим сообщением:

Доступ запрещен. У вас нет разрешения на доступ к «любым ссылкам на элементы, перечисленным в приведенной выше ссылке на категорию» на этом сервере.Ссылка # 18.14d6f7bd.1526927300.12232a22

Я также пытался изменить пользовательский агент с помощью параметров Chrome, но он не работал.

Это мой код:

import sys
reload(sys)
sys.setdefaultencoding('utf8')
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

url = 'https://www.macys.com/shop/featured/women-handbags'

def init_selenium():
    global driver
    driver = webdriver.Chrome("/Users/rodrigopeniche/Downloads/chromedriver")
    driver.get(url)

def find_page_items():
    items_elements = driver.find_elements_by_css_selector('li.productThumbnailItem')
    for index, element in enumerate(items_elements):
    items_elements = driver.find_elements_by_css_selector('li.productThumbnailItem')
    item_link = items_elements[index].find_element_by_tag_name('a').get_attribute('href')
    driver.get(item_link)
    driver.back()


init_selenium()
find_page_items()

Есть идеи, что происходит и что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 21 мая 2018

Это не решение, ориентированное на селен (полностью), но оно работает.Вы можете попробовать.

from selenium import webdriver 
import requests
from bs4 import BeautifulSoup

url = 'https://www.macys.com/shop/featured/women-handbags'

def find_page_items(driver,link):
    driver.get(link)
    item_link = [item.find_element_by_tag_name('a').get_attribute('href') for item in driver.find_elements_by_css_selector('li.productThumbnailItem')]
    for newlink in item_link:
        res = requests.get(newlink,headers={"User-Agent":"Mozilla/5.0"})
        soup = BeautifulSoup(res.text,"lxml")
        name = soup.select_one("h1[itemprop='name']").text.strip()
        print(name)

if __name__ == '__main__':
    driver = webdriver.Chrome()
    try:
        find_page_items(driver,url)
    finally:
        driver.quit()

Вывод:

Mercer Medium Bonded-Leather Crossbody
Mercer Large Tote
Nolita Medium Satchel
Voyager Medium Multifunction Top-Zip Tote
Mercer Medium Crossbody
Kelsey Large Crossbody
Medium Mercer Gallery
Mercer Large Center Tote
Signature Raven Large Tote

Однако, если вы придерживаетесь селена, то вам нужно создавать его новый экземпляр каждый раз, когда вы просматриваете новый URL илиможет быть лучшим вариантом будет очистить кеш.

...