【发布时间】:2021-02-13 11:56:16
【问题描述】:
我有一堆脚本可以进行网页抓取、下载文件并使用 pandas 读取它们。这个过程必须部署在一个新的架构中,在这种架构中下载磁盘上的文件是不合适的,而是最好将文件保存在内存中并从那里用 pandas 读取它。出于演示目的,我在这里留下了一个从随机网站下载 excel 文件的网络抓取脚本:
import time
import pandas as pd
from io import StringIO, BytesIO
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from datetime import date, timedelta
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
pathDriver = #Path to chromedriver
driver = webdriver.Chrome(executable_path=pathDriver)
url = 'https://file-examples.com/index.php/sample-documents-download/sample-xls-download/'
driver.get(url)
time.sleep(1)
file_link = driver.find_element_by_xpath('//*[@id="table-files"]/tbody/tr[1]/td[5]/a[1]')
file_link.click()
此脚本有效地将文件下载到我的下载文件夹中。我尝试的是在click() 方法之前和之后放置一个StringIO() 或BytesIO() 流,并读取与此类似的对象:
file_object = StringIO()
df = pd.read_excel(file_object.read())
但是file_object没有捕获文件,甚至文件仍然下载到我的磁盘中。
对此有什么建议吗?
【问题讨论】:
-
不是
file_link.click(),你能找到链接的href是什么吗?这样您就可以使用df = pd.read_excel(href)或使用requests将其下载到临时文件夹/内存中 -
嗨@CodeDifferent,不幸的是,“href”属性并不存在于我的剪贴板脚本中的所有 Html 元素中,因此不是一个可扩展的解决方案。
-
@DavidLópez 请提供另一个“href”属性不存在的用例。
-
要么创建一个 ramdisk 要么使用脚本注入来拦截请求/响应。
-
Scraping 这个词更适合这个问题的上下文。请注意,报废和刮有显着的different meaning。会自己编辑问题,但显然需要更改至少 6 个字符。
标签: python pandas selenium selenium-webdriver