使用Beautifulsoup阅读HTML并查找典型数据

时间:2018-07-24 08:02:14

标签: python html parsing beautifulsoup quantitative-finance

我之前写过类似的问题,但我需要与上一个问题有所不同。

我有一个写在下面的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)

0 个答案:

没有答案