- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想根据关键字PART将单个html文件拆分为多个html文件。给定的 html 文件包含提及四个部分的文本 - 第 I 部分、第 II 部分、第 III 部分和第 IV 部分。
我想将 html 分成 5 部分:
这些是一些示例 html 文件:
https://www.sec.gov/Archives/edgar/data/763744/000076374419000018/lcii-20181231.htm https://www.sec.gov/Archives/edgar/data/820027/000082002719000010/amp12312018.htm
请引用下面我的代码:
import sys
import re
from bs4 import BeautifulSoup
import os
import numpy as np
from urllib.request import urlopen
import pandas as pd
list_values_page_number=[]
type_parts = ['PART 0','PART I','PART II','PART III','PART IV']
output_path = r"D:\Tasks\10K\SEGMENTATION\2_segmentation"
input_files = ['https://www.sec.gov/Archives/edgar/data/763744/000076374419000018/lcii-20181231.htm',
'https://www.sec.gov/Archives/edgar/data/820027/000082002719000010/amp12312018.htm']
input_folder = r'D:\Tasks\10K\input_files'
#content_segmentation_file_name = '/home/mobius365/Downloads/10-K_financial_documents/content_segmentation.csv'
#co_ent_nbr_links = dict(zip(list(input_data_frame["CO_Ent_Nbr"]),list(input_data_frame["Updated_Links"])))
def page_segmentation(list_of_content,prev_index, page_number):
global Part_page_number
global previous_index
global count
global store_index_list
global output_file_storage_folder
global file_content_prettified_list
global part_repeat_storage_list
global indices
page_soup = BeautifulSoup(" ".join(list_of_content), "lxml")
values_with_part=page_soup.findAll(text=re.compile("Par|PAR|ART"))
list_of_values=[]
values_with_part=[values_list.strip() for values_list in values_with_part]
for Part_values in values_with_part:
if (("ART" in Part_values.strip()[:5] or "art" in Part_values.strip()[:5] ) and Part_values.strip()[-1] in ["I","V"] and len(Part_values)<9):
list_of_values.append(Part_values)
elif(len(Part_values.strip())<6):
list_of_values.append(Part_values)
else:
pass
if len(list_of_values) == 1 :
values_parents_finder = page_soup.find(text=re.compile(list_of_values[0]))
parent_0_value = values_parents_finder.findParents()[0].text.strip().upper()
parent_1_value = values_parents_finder.findParents()[1].text.strip().upper()
parent_0_value = parent_0_value.replace(u'\xa0', u' ')
parent_1_value = parent_1_value.replace(u'\xa0', u' ')
parent_0_value = re.sub(' +', '',parent_0_value)
parent_1_value = re.sub(' +', '',parent_1_value)
if ((parent_0_value[0]=='P' and parent_0_value[-1] in ["I","V"]) or (parent_1_value[0]=='P' and (parent_1_value[-1] in ["I","V"] or parent_1_value[-2:] in ["I.","V."] ))):
if(parent_0_value[:4].upper()=='PART' and (parent_0_value[-1] in ["I","V"] or parent_0_value[-2:] in ["I.","V."])):
temp_name=re.sub('t', 't ',parent_0_value)
temp_name=re.sub('T', 'T ',parent_0_value)
else:
temp_name=re.sub('t', 't ',parent_1_value)
temp_name=re.sub('T', 'T ',parent_1_value)
if (temp_name not in part_repeat_storage_list):
part_repeat_storage_list.append(temp_name)
Part_page_number[temp_name.upper()] = page_number
next_level_index = prev_index
with open(output_file_storage_folder+"/"+type_parts[count]+".html", "w",encoding='utf-8') as file:
file.write(" ".join(file_content_prettified_list[previous_index:next_level_index]))
file.close()
store_index_list.append((previous_index,next_level_index))
previous_index = next_level_index
count+=1
else:
pass
elif len(list_of_values) == 2 :
for two_values in list_of_values :
values_parents_finder = page_soup.find(text = re.compile(two_values[0]))
parent_0_value = values_parents_finder.findParents()[0].text.strip().upper()
parent_1_value = values_parents_finder.findParents()[1].text.strip().upper()
parent_0_value = parent_0_value.replace(u'\xa0', u' ')
parent_1_value = parent_1_value.replace(u'\xa0', u' ')
parent_0_value = re.sub(' +', '',parent_0_value)
parent_1_value = re.sub(' +', '',parent_1_value)
if ((parent_0_value[0]=='P' and parent_0_value[-1] in ["I","V"]) or (parent_1_value[0]=='P' and (parent_1_value[-1] in ["I","V"] or parent_1_value[-2:] in ["I.","V."]))):
if(parent_0_value[:4].upper()=='PART' and parent_0_value[-1] in ["I","V"] ):
temp_name=re.sub('t', 't ',parent_0_value)
temp_name=re.sub('T', 'T ',parent_0_value)
else:
temp_name=re.sub('t', 't ',parent_1_value)
temp_name=re.sub('T', 'T ',parent_1_value)
if (temp_name not in part_repeat_storage_list):
part_repeat_storage_list.append(temp_name)
next_level_index = prev_index
Part_page_number[temp_name.upper()] = page_number
with open(output_file_storage_folder+"/"+type_parts[count]+".html", "w",encoding='utf-8') as file:
file.write(" ".join(file_content_prettified_list[previous_index:indices[indices.index(next_level_index)+1]]))
file.close()
store_index_list.append((previous_index,next_level_index))
previous_index = next_level_index
count+=1
for link in input_files:
html = urlopen(link).read().decode('utf-8')
name = link.split('/')[-1]
with open(input_folder+"/"+name, 'w', encoding='utf-8') as f:
f.write(html)
f.close()
for links in input_files:
files = links.split("/")[-1]
file_name = os.path.join(input_folder,files)
print (file_name)
output_file_storage_folder = os.path.join(output_path,files)
if not os.path.exists(output_file_storage_folder):
os.makedirs(output_file_storage_folder)
try:
file_content_reading = open(file_name, encoding="utf8").read()
except Exception as e:
print(e)
file_content_bs = BeautifulSoup(file_content_reading, 'lxml')
file_content_prettified_list = file_content_bs.prettify().split("\n")
file_content_space_removed = [tags_values.strip() for tags_values in file_content_prettified_list]
page_splits = file_content_bs.find_all(attrs={'style': re.compile('page-break-before|page-break-after',re.IGNORECASE)})
if (len(page_splits)< 90 ):
page_splits=page_splits
indices = [index_number for index_number, html_tags in enumerate(file_content_space_removed) if ('page-break-after' in html_tags.lower() or 'page-break-before' in html_tags.lower())]
else:
page_splits=[tag_value for tag_value in page_splits if str(tag_value)[:2]!="<p"]
indices = [index_number for index_number, html_tags in enumerate(file_content_space_removed) if ('page-break-after' in html_tags.lower() or 'page-break-before' in html_tags.lower())]
type_parts=['PART 0','PART I','PART II','PART III','PART IV']
previous_index=0
store_index_list=[]
part_repeat_storage_list=[]
count=0
Part_page_number = { "PART 0" : 0, "PART I" : np.nan, "PART II" : np.nan , "PART III" : np.nan , "PART IV" : np.nan }
prev_index=0
count_page_number=1
for index_value in indices:
next_index = index_value
page_segmentation(file_content_space_removed[prev_index:index_value],prev_index,count_page_number)
prev_index = next_index
count_page_number+=1
page_segmentation(file_content_space_removed[next_index:],prev_index,count_page_number)
if(len(store_index_list)!=0):
with open(output_file_storage_folder+"/"+type_parts[count]+".html", "w",encoding='utf-8') as file:
file.write(" ".join(file_content_prettified_list[store_index_list[-1][-1]:]))
file.close()
else:
with open(output_file_storage_folder+"/"+type_parts[count]+".html", "w",encoding='utf-8') as file:
file.write(" ".join(file_content_prettified_list[:]))
file.close()
Part_page_number['File_Name']=files
list_values_page_number.append(Part_page_number)
df_summary = pd.DataFrame(list_values_page_number)
df_summary.to_excel("summary_10K_Page_Segmentation.xlsx",index=False)
从上面的代码中,我无法按照我的意愿分割 html 文件。
编辑:
我添加了一组新的网址。
https://www.sec.gov/Archives/edgar/data/887921/000088792119000004/rev201810-k.htm https://www.sec.gov/Archives/edgar/data/104918/000010491819000053/ava-20181231x10k.htm https://www.sec.gov/Archives/edgar/data/886982/000119312519050198/d669877d10k.htm https://www.sec.gov/Archives/edgar/data/878927/000156459019004755/odfl-10k_20181231.htm https://www.sec.gov/Archives/edgar/data/785161/000078516119000011/ehc10k123118.htm https://www.sec.gov/Archives/edgar/data/1393818/000119312519061011/d663205d10k.htm https://www.sec.gov/Archives/edgar/data/86521/000008652119000014/sre20181231form10k.htm https://www.sec.gov/Archives/edgar/data/76282/000007628219000021/pkoh20181231-10k.htm https://www.sec.gov/Archives/edgar/data/883237/000088323719000026/vrts1231201810-k.htm https://www.sec.gov/Archives/edgar/data/883945/000088394519000016/usak-20181231.htm https://www.sec.gov/Archives/edgar/data/1000623/000100062319000048/swmform10-k12312018.htm
最佳答案
嗯,我写得很快,但是很复杂。
我会解释一下代码。
<hr style="page-break-after:always"></hr>
)。我将粘贴代码。我希望这段代码有帮助
import requests
from bs4 import BeautifulSoup
response = requests.get("https://www.sec.gov/Archives/edgar/data/763744/000076374419000018/lcii-20181231.htm", verify=False)
file_content_reading = response.text
splited_pages = file_content_reading.split('<hr style="page-break-after:always"></hr>')
skip_words = ['INDEX']
part_strings = [['PART I', 'PART I.', 'PART I. '],['PART II', 'PART II.', 'PART II. '],['PART III', 'PART III.', 'PART III. '],['PART IV', 'PART IV.', 'PART IV. ']]
part_content_list = []
appned_content = ""
part = 0
def maching_result(content_soup, list_string):
result = None
for match_string in list_string:
if content_soup.find("span", text=match_string) is not None:
result = match_string
break
return result
for page in splited_pages:
content = BeautifulSoup(page, "lxml")
if(part < len(part_strings)) and maching_result(content, skip_words) is None:
output = maching_result(content, part_strings[part])
if maching_result(content, part_strings[part]) is not None:
part += 1
index = page.find(str(content.find("span", text=output)))
first = page[:index]
second = page[index:]
part_content_list.append(appned_content + first)
appned_content = second + page
else:
appned_content += page + '<hr style="page-break-after:always"></hr>'
else:
appned_content += page
part_content_list.append(appned_content)
num = 0
for part in part_content_list:
soup = BeautifulSoup(part,"lxml")
with open("output"+ str(num)+".html", "w", encoding="utf-8") as file:
file.write(str(soup))
num +=1
关于python - 如何根据文本中的关键字将一个html页面拆分为多个html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59550860/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!