我之前写过类似的问题,但我需要与上一个问题有所不同。
我有一个写在下面的html数据(我需要的部分数据)。
我已经有 rcpNo 值,但是eleId从1更改为33,偏移量,长度没有任何常规模式。其中三个数据由数字组成,有时是不同的数字。
我需要阅读 rcpNO , eleId ,偏移量,长度和 dtd 。
(dtd固定为'dart3.xsd',但我仅尝试使用一个html,因此对于不同的html数据,可能会有不同的dtd值。因此,我想从html数据中读取。)
# This is the part of html
#viewDoc(rcpNo, dcmNo, eleId, offset, length, dtd)
treeNode1.appendChild(treeNode2);
treeNode2 = new Tree.TreeNode({
text: "4. The number of stocks",
id: "7",
cls: "text",
listeners: {
click: function() {viewDoc('20180515000480', '6177478', '7', '59749', '7130', 'dart3.xsd');}
}
});
cnt++;
重复类似的数据,所以我编写了HTML的一部分:
treeNode2 = new Tree.TreeNode({
text: "1. Summary information",
id: "12",
cls: "text",
listeners: {
click: function() {viewDoc('20180515000480', '6177478', '12', '189335', '18247', 'dart3.xsd');}
}
});
cnt++;
treeNode1.appendChild(treeNode2);
treeNode2 = new Tree.TreeNode({
text: "2. Linked finance state",
id: "13",
cls: "text",
listeners: {
click: function() {viewDoc('20180515000480', '6177478', '13', '207823', '76870', 'dart3.xsd');}
}
});
cnt++;
treeNode1.appendChild(treeNode2);
treeNode2 = new Tree.TreeNode({
text: "3. Comment for linked finance state",
id: "14",
cls: "text",
listeners: {
click: function() {viewDoc('20180515000480', '6177478', '14', '284697', '372938', 'dart3.xsd');}
}
});
cnt++;
如您所见,上面的文本和ID会定期更改。我想读取所有的dcmNo,eleId,offset,length和dtd信息。尤其是使用典型的ID和文字。
我尝试过以下
string = "{viewDoc('20180515000480', '6177478', '6', '58846', '899', 'dart3.xsd');}"
>>> pattern = re.compile(r'viewDoc\(\'\d+\', \'(\d+)\', \'(\d+)\', \'(\d+)\', \'(\d+)\', \'(\d+)\' .+\)', re.MULTILINE | re.DOTALL)
和Beautifulsoup
>>> soup = BeautifulSoup(html, 'html.parser')
>>> soup.find_all(string = pattern)
并且此命令找到所有html,我无法区分数据。但这是行不通的,它会从html中找到我不需要阅读的第一个文本。
这是如何从url获取html
from bs4 import BeautifulSoup
import requests
import re
url = "http://dart.fss.or.kr/api/search.json?auth="+API_KEY \
+"&crp_cd="+company_code + "&page_set=100" \
+"&start_dt=19990101&bsn_tp=A001&bsn_tp=A002&bsn_tp=A003"
json_data = requests.get(url).json()
list = json_data['list']
data = pd.DataFrame.from_dict(list)
print(data['rcp_no'][0])
url2 = "http://dart.fss.or.kr/dsaf001/main.do?rcpNo="+data['rcp_no'][0]
temp = requests.get(url2)
html = temp.text
soup = BeautifulSoup(html, "html.parser")
和上面的html示例是print(soup)的一部分。 正如我说的那样,html中有很多相同的格式,我想阅读典型的行。例如,如果我可以找到下面的行,那么我想获取数据
# viewDoc(rcpNo, dcmNo, eleId, offset, length, dtd)
viewDoc('20180515000480', '6177478', '7', '59749', '7130', 'dart3.xsd')
viewDoc('20180515000480', '6177478', '13', '207823', '76870', 'dart3.xsd')
like,['6177478','7','59749','7130','dart3.xsd'],['6177478','7','59749','7130','dart3.xsd '],数字和文本数据(dcmNo,eleId,偏移量,长度和dtd)