Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python从页面下载文件_Python_Selenium_Web Scraping_Python Requests - Fatal编程技术网

如何使用python从页面下载文件

如何使用python从页面下载文件,python,selenium,web-scraping,python-requests,Python,Selenium,Web Scraping,Python Requests,我从这个页面下载txt文件时遇到问题:(当你向下滚动并看到下载:txt、xls和xml时) 我的目标是创建一个scraper,它将转到链接页面,例如单击txt链接并保存下载的文件 我不确定如何解决的主要问题: 该文件没有一个真正的链接,我可以调用并下载它,但该链接是基于过滤器和文件类型使用JS创建的 当我使用python的requestslibrary并调用带有所有标题的链接时,它只是将我重定向到 尝试的方法: 使用诸如ParseHub之类的scraper来下载链接并没有达到预期的效果。但

我从这个页面下载txt文件时遇到问题:(当你向下滚动并看到下载:txt、xls和xml时)

我的目标是创建一个scraper,它将转到链接页面,例如单击txt链接并保存下载的文件

我不确定如何解决的主要问题:

  • 该文件没有一个真正的链接,我可以调用并下载它,但该链接是基于过滤器和文件类型使用JS创建的

  • 当我使用python的
    requests
    library并调用带有所有标题的链接时,它只是将我重定向到

尝试的方法:

  • 使用诸如ParseHub之类的scraper来下载链接并没有达到预期的效果。但是这个刮刀是最接近我想要的

  • 使用
    请求
    库使用HXR请求用于下载文件的标题连接到链接,但它只是将我重定向到


如果您能为此任务提出一些解决方案,请提前向您表示感谢。:-)

您可以使用Selenium将这些数据下载到您选择的目录中;您只需要指定数据将保存到的目录。在下面的步骤中,我将把txt数据保存到我的桌面:

from selenium import webdriver

download_dir = '/Users/doug/Desktop/'

chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : download_dir}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.ceps.cz/en/all-data')

container = driver.find_element_by_class_name('download-graph-data')
button = container.find_element_by_tag_name('li')
button.click()
你应该这样做:

导入请求
txt_格式='txt'
xls#U格式='xls'#以二进制模式打开
xml_格式='xlm'#以二进制模式打开
def下载(文件类型):
url=f'https://www.ceps.cz/download-data/?format={txt_格式}'
response=requests.get(url)
如果文件类型为txt格式:
打开(f'file.{file_type},'w')作为文件:
file.write(response.text)
其他:
打开(f'file.{file_type},'wb')作为文件:
file.write(response.content)
下载(txt_格式)

你应该在
wb
模式下打开文件,然后写
response.content
。因为他想下载一个txt文件,response.text是str-type,所以最好在“w”模式下打开,但对于xls和xml文件?在这种情况下是“wb”模式。我添加这些变量只是为了让他知道如何实现它。不过,我会编辑答案谢谢!您好@duhaime good solution,您能告诉我通过selenium读取html内容的方法吗?@NagaKiran当然可以,使用上面的代码,我们会调用
driver.page\u source
-这将返回当前页面的html。我希望这有帮助!