Соскоб с веб-сайта finishline.com с использованием BS4 или Selenium - PullRequest
3 голосов
/ 12 апреля 2019

Я пытаюсь очистить данные из https://www.finishline.com, используя либо Selenium, либо Beautifulsoup 4. До сих пор у меня не получалось, поэтому я обратился за помощью к Stackoverflow - надеясь, что кто-то знает способ обойти защиту от соскоба. .

Я пытался использовать Beautifulsoup 4 и Selenium. Ниже приведены несколько простых примеров.

Общий импорт, используемый в моей основной программе:

import requests
import csv
import io
import os
import re
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from datetime import datetime
from bs4 import BeautifulSoup

код Beautifulsoup 4:

data2 = requests.get("https://www.finishline.com/store/product/mens-nike-air-max-95-se-casual-shoes/prod2783292?styleId=AJ2018&colorId=004")
soup2 = BeautifulSoup(data2.text, 'html.parser')

x = soup2.find('h1', attrs={'id': 'title'}).text.strip()
print(x)

Селен код:

options = Options()
options.headless = True
options.add_argument('log-level=3')
driver = webdriver.Chrome(options=options)
driver.get("https://www.finishline.com/store/product/mens-nike-air-max-95-se-casual-shoes/prod2783292?styleId=AJ2018&colorId=004") 
x = driver.find_element_by_xpath("//h1[1]")
print(x)
driver.close()

Оба эти фрагмента являются попытками получить название продукта со страницы продукта.

Фрагмент Beautifulsoup 4 иногда просто застревает и ничего не делает, а иногда возвращается

requests.exceptions.ConnectionError: ('Connection aborted.', OSError("(10060, 'WSAETIMEDOUT')"))

Возвращает фрагмент Selenium

<selenium.webdriver.remote.webelement.WebElement (session="b3707fb7d7b201e2fa30dabbedec32c5", element="0.10646785765405364-1")>

, что означает, что он нашел элемент, но когда я пытаюсь преобразовать его в текст, изменив

x = driver.find_element_by_xpath("//h1[1]")

до

x = driver.find_element_by_xpath("//h1[1]").text

возвращает Access Denied, что также иногда возвращает сам сайт в браузере. Это можно обойти, очистив куки.

Кто-нибудь знает способ очистки данных с этого сайта? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Запросы отклоняются сервером из-за пользовательских агентов, я добавил в запрос пользовательский агент.

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
data2 = requests.get("https://www.finishline.com/store/product/mens-nike-air-max-95-se-casual-shoes/prod2783292?styleId=AJ2018&colorId=004",headers=headers)
soup2 = BeautifulSoup(data2.text, 'html.parser')

x = soup2.find('h1', attrs={'id': 'title'}).text.strip()
print(x)

Вывод:

Men's Nike Air Max 95 SE Casual Shoes
1 голос
/ 12 апреля 2019

Попробуйте как это, для меня это работает, он возвращает MEN'S NIKE AIR MAX 95 SE CASUAL SHOES

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

driver = webdriver.Chrome()
driver.get("https://www.finishline.com/store/product/mens-nike-air-max-95-se-casual-shoes/prod2783292?styleId=AJ2018&colorId=004")
x = driver.find_element_by_xpath('//*[@id="title"]')
print(x.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...