我想收集美国农业部的数据,特别是https://mymarketnews.ams.usda.gov/viewReport/2960,我收集了2020年9月14日至7月的所有最新数据.他们似乎改变了存储数据的方式,所以从2020年7月到2017年10月,他们以文本文件的形式存储,我想挖掘这些文件,但我找不到可靠的方法来做到这一点.

我已经try 了多种方法,到目前为止,我的selenium导入出现了问题,无法使用ChromeDriver,这可能会解决我的问题

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

URL = 'https://mymarketnews.ams.usda.gov/viewReport/2960'

def extract_text_file_links(driver):
    # Modify the selector as necessary
    elements = driver.find_elements(By.CSS_SELECTOR, 'a[href$=".txt"]')
    return [element.get_attribute('href') for element in elements]

def main():
    # Set up the webdriver
    options = webdriver.ChromeOptions()
    options.headless = True  # This runs Chrome in the background
    driver = webdriver.Chrome(executable_path='changed path', options=options)

    try:
        driver.get(URL)
    
        # Waiting for a specific element to ensure the page has loaded.
        # Adjust the selector and timeout as necessary.
        WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a[href$=".txt"]')))
    
        text_file_links = extract_text_file_links(driver)
        for link in text_file_links:
            print(link)
        # You can then download these files as demonstrated in previous answers.

    finally:
        driver.quit()

if __name__ == "__main__":
    main()
ValueError: Timeout value connect was <object object at 0x0000020075CC4820>, but it must be an int, float or None.

不管怎样,我都不能让这个刮刀工作,文件都在网站上的一个文件夹里,我不知道如何正确地刮掉这样的东西

推荐答案

如果我正确理解了您的要求,下面这段代码应该可以帮助您从该网页获取预期的文本文件:

import requests

base = 'https://mymarketnews.ams.usda.gov{}'
link = 'https://mymarketnews.ams.usda.gov/get_previous_release/2960'

params = {
    'type': 'month',
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
}

with requests.Session() as s:
    s.headers.update(headers)
    for year in ['2017','2018','2019','2020']:
        for month in range(1,13):
            params['month'] = month
            params['year'] = int(year)
            resp = s.get(link,params=params)
            if not resp.json()['data']: continue
            for item in resp.json()['data']:
                if item['file_extension']!='TXT': continue
                print(base.format(item['document_url']))

帖子主题:Re:Колибри

https://mymarketnews.ams.usda.gov/filerepo/sites/default/files/2960/2017-10-31/476944/LR_GR11120171031.TXT
https://mymarketnews.ams.usda.gov/filerepo/sites/default/files/2960/2017-10-27/476943/LR_GR11120171027.TXT
https://mymarketnews.ams.usda.gov/filerepo/sites/default/files/2960/2017-10-26/476942/LR_GR11120171026.TXT
https://mymarketnews.ams.usda.gov/filerepo/sites/default/files/2960/2017-10-25/476941/LR_GR11120171025.TXT

Python相关问答推荐

如何在Python中使用ijson解析SON期间检索文件位置?

在Python和matlab中显示不同 colored颜色 的图像

更改matplotlib彩色条的字体并勾选标签?

根据不同列的值在收件箱中移动数据

试图找到Python方法来部分填充numpy数组

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何在solve()之后获得症状上的等式的值

有没有一种方法可以从python的pussompy比较结果中提取文本?

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

在含噪声的3D点网格中识别4连通点模式

driver. find_element无法通过class_name找到元素'""

如何启动下载并在不击中磁盘的情况下呈现响应?

CommandeError:模块numba没有属性generated_jit''''

处理具有多个独立头的CSV文件

下三角形掩码与seaborn clustermap bug

导入错误:无法导入名称';操作';

人口全部乱序 - Python—Matplotlib—映射

使用python playwright从 Select 子菜单中 Select 值

计算机找不到已安装的库'

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形