Читайте HTML с Beautifulsoup и находите типичные данные
Я уже писал подобный вопрос, но мне нужно что-то другое, что я получил от предыдущего вопроса.
У меня есть HTML-данные, которые написаны ниже (часть данных, где мне нужно).
Я уже получил значение rcpNo, но eleId изменяется с 1 на 33, смещение, длина не имеют регулярного шаблона. Три из данных состоят из цифр, иногда разные цифры.
Мне нужно прочитать rcpNO, eleId, offset, length и dtd.
(dtd фиксируется как 'dart3.xsd', но я пробую это только один html, так что существует вероятность различного значения dtd для разных html-данных. Поэтому я хочу читать из 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++;
Как вы можете видеть выше, текст и идентификатор регулярно меняются. Я хочу прочитать всю информацию о dcmNo, eleId, offset, length и dtd. особенно с типичным идентификатором и текстом.
Я пытался ниже
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, что мне не нужно читать.
редактировать
Вот как я могу получить HTML от URL
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 является частью печати (суп). Как я уже сказал, в HTML много одинакового формата, и я хочу прочитать типичную строку. Например, если я могу найти ниже строки, то я хочу получить данные
# viewDoc(rcpNo, dcmNo, eleId, offset, length, dtd)
viewDoc('20180515000480', '6177478', '7', '59749', '7130', 'dart3.xsd')
viewDoc('20180515000480', '6177478', '13', '207823', '76870', 'dart3.xsd')
например, ['6177478', '7', '59749', '7130', 'dart3.xsd'], ['6177478', '7', '59749', '7130', 'dart3.xsd'], числовые и текстовые данные (dcmNo, eleId, offset, length и dtd)