【问题标题】:Click "Download csv" button using Selenium and Beautiful Soup使用 Selenium 和 Beautiful Soup 单击“下载 csv”按钮
【发布时间】:2021-03-10 10:13:07
【问题描述】:

我正在尝试从该网站下载 csv 文件:https://invasions.si.edu/nbicdb/arrivals?state=AL&submit=Search+database&begin=2000-01-01&end=2020-11-11&type=General+Cargo&bwms=any

为此,我需要点击下载 CSV 文件的 CSV 按钮。但是,我需要对多个链接执行此操作,这就是为什么我想使用 Selenium 来自动执行单击链接的任务。

我当前运行的代码,但实际上并没有将 csv 文件下载到指定文件夹(或任何地方)。

这是我目前拥有的代码:

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time

options = webdriver.ChromeOptions() 
options.add_argument("download.default_directory=folder") # Set the download Path
driver = webdriver.Chrome(options=options)

url = 'https://invasions.si.edu/nbicdb/arrivals?state=AL&submit=Search+database&begin=2000-01-01&end=2020-11-11&type=General+Cargo&bwms=any'

driver.get(url)

python_button = driver.find_element_by_xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "csvbutton", " " ))]')
python_button.click()

如果有任何帮助,我将不胜感激!谢谢

【问题讨论】:

  • 您好,您可以帮忙点击带有 CSV 字样的 a 标签吗?如果是这样,一个简单的 xpath 将是 //a[text()='CSV'] 或 //a[@class='csvbutton']。

标签: python selenium csv selenium-webdriver web-scraping


【解决方案1】:

你可以用这种方式解决你的问题:

import requests
from bs4 import BeautifulSoup

# url of initial page with data
url = 'https://invasions.si.edu/nbicdb/arrivals?state=AL&submit=Search+database&begin=2000-01-01&end=2020-11-11&type=General+Cargo&bwms=any'
# name of csv file where to store downloaded csv data
csv_file_name = '/Users/eilyasov/Documents/arrivals_data.csv'

# get html content of initial page
html_data = requests.get(url=url) \
                    .content
# generate Beautifulsoup object based on hrml content of initial page
soup = BeautifulSoup(markup=html_data)
# extract url extension of downloadable csv file
csv_url_extension = soup.find(name='a', attrs={'class': 'csvbutton'}) \
                        .get(key='href')
# construct url of downloadable csv file
csv_url = 'https://invasions.si.edu' + csv_url_extension
# get content of downloadable csv file and saving it to file
response = requests.get(url=csv_url)
if response.status_code == 200:
    with open(csv_file_name, 'wb') as file:
        file.write(response.content)

【讨论】:

  • @scrapingsarah,这种方法对您解决问题有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2020-05-04
  • 2021-12-05
  • 2019-04-29
  • 2018-04-06
相关资源
最近更新 更多