2017-02-19 2 views
0

Я пытаюсь получить информацию с сайта здесь, в Германии. Поскольку этот сайт загружает больше контента, нажав стрелку вниз в нижней части сайта, я думал, что должен использовать selenium для достижения процесса загрузки. После этого скрипт должен получить необходимую информацию через BeautifulSoup и извлечь его в файл CSV.Python3, Selenium, BeautifulSoup4 stack не загружается дополнительная информация с сайта

К сожалению, мой скрипт, похоже, не нажимает на нужную кнопку, поэтому я получаю только первую часть информации.

Мой код выглядит следующим образом:

import csv 
import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 


with open('shoop.csv','w', encoding='utf-8') as csv_file: 
    csv_writer = csv.writer(csv_file, delimiter=";") 
    csv_writer.writerow(['Headline', 'Cashback']) 
    driver = webdriver.Firefox() 
    driver.get('https://www.shoop.de/stoebern/haus_technik/3/popular/') 
    driver.find_element_by_class_name('icon-down_open_big').click() 
    r = driver.page_source 

    driver.quit() 
    soup = BeautifulSoup(r) 
    for advertiser in soup.find_all('div', {'class': 'merchant_item'}):  
     headline = advertiser.find('h3', {'class':'merchant_name'}).text 
     cashback = advertiser.find('span', {'class':'rates_number'}).text 
     liste = ([headline, cashback]) 
     print(liste) 
     csv_writer.writerow(liste) 
csv_file.close() 
+0

Thx Лева, который спас мой день. С небольшим дополнительным временем сна в моем коде экспорт в csv работает по назначению. –

ответ

0

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

прокручивая страницу в Selenium делается путем выполнения сценария:

# Whenever you want to press the arrow, scroll down with this line 
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') 
driver.find_element_by_class_name('icon-down_open_big').click()