Python3,Selenium,BeautifulSoup4堆栈不会从站点加载更多信息

时间:2017-02-19 01:48:42

标签: python-3.x selenium

我正试图从德国的一个网站获取一些信息。由于此站点通过单击站点底部的向下箭头加载更多内容,我认为我应该使用selenium来实现加载过程。之后,脚本应通过BeautifulSoup获取所需信息并将其提取到CSV文件。

不幸的是我的脚本似乎没有点击所需的按钮,所以我只收到第一部分信息。

我的代码如下:

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()

1 个答案:

答案 0 :(得分: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()