gpt4 book ai didi

regex - 在10-K Edgar文件中使用Beautifulsoup和正则表达式提取文本

转载 作者:行者123 更新时间:2023-12-02 04:23:33 24 4
gpt4 key购买 nike

我想从大约10000个文件中自动提取“1A。风险因素”部分,并将其写入txt文件。
带有文件的示例URL可以找到here

所需部分在“项目1a风险因素”和“项目1b”之间。问题在于,“item”,“1a”和“1b”在所有这些文件中可能看起来都不同,并且可能出现在多个位置-不仅是我感兴趣的最长,最适当的文件。因此,应该使用一些正则表达式,以便:

  • 提取“1a”和“1b”之间的最长部分(否则将显示目录和其他无用的元素)
  • 考虑到表达式的不同变体

  • 我尝试在脚本中实现这两个目标,但由于这是我在Python中的第一个项目,所以我只是随机排序了一些我认为可能有用的表达式,而且显然它们的顺序错误(我肯定应该对“< a>“元素”,将每个提取的“部分”添加到列表中,然后选择最长的“部分”并将其写入文件(尽管我不知道如何实现此想法)。
    编辑:当前,我的方法从目录中返回的1a和1b之间的数据很少(我认为这是页码),然后停止...(?)

    我的代码:
    import requests
    import re
    import csv

    from bs4 import BeautifulSoup as bs
    with open('indexes.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for line in reader:
    fn1 = line[0]
    fn2 = re.sub(r'[/\\]', '', line[1])
    fn3 = re.sub(r'[/\\]', '', line[2])
    fn4 = line[3]
    saveas = '-'.join([fn1, fn2, fn3, fn4])
    f = open(saveas + ".txt", "w+",encoding="utf-8")
    url = 'https://www.sec.gov/Archives/' + line[4].strip()
    print(url)
    response = requests.get(url)
    soup = bs(response.content, 'html.parser')
    risks = soup.find_all('a')
    regexTxt = 'item[^a-zA-Z\n]*1a.*item[^a-zA-Z\n]*1b'
    for risk in risks:
    for i in risk.findAllNext():
    i.get_text()
    sections = re.findall(regexTxt, str(i), re.IGNORECASE | re.DOTALL)
    for section in sections:
    clean = re.compile('<.*?>')
    # section = re.sub(r'table of contents', '', section, flags=re.IGNORECASE)
    # section = section.strip()
    # section = re.sub('\s+', '', section).strip()
    print(re.sub(clean, '', section))

    目的是在当前URL中找到“1a”和“1b”之间的最长部分(无论它们的外观如何)并将其写入文件。

    最佳答案

    最后,我使用了CSV file,它包含一列HTMURL,它是htm格式10-K的链接。我是从Kai Chen获得的,它创建了this website。我写了一个简单的脚本,将纯txt写入文件。处理它现在将是一个简单的任务。

    import requests
    import csv
    from pathlib import Path

    from bs4 import BeautifulSoup
    with open('index.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for line in reader:
    print(line[9])
    url = line[9]
    html_doc = requests.get(url).text
    soup = BeautifulSoup(html_doc, 'html.parser')
    print(soup.get_text())
    name = line[1]
    name = name.replace('/', '')
    name = name.replace("/PA/", "")
    name = name.replace("/DE/", "")
    dir = Path(name + line[4] + ".txt")
    f = open(dir, "w+", encoding="utf-8")
    if dir.is_dir():
    break
    else: f.write(soup.get_text())

    关于regex - 在10-K Edgar文件中使用Beautifulsoup和正则表达式提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57308830/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com