我尝试使用api读取公司财务数据。
所以我访问html数据,我想用python解析html数据,但是我不知道如何读取典型数据。有可以给我html数据的代码
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)
url2 = "http://dart.fss.or.kr/dsaf001/main.do?rcpNo="+data['rcp_no'][0]
print("Total number of report : ", json_data['total_count'])
temp = requests.get(url2)
html = temp.text
soup = BeautifulSoup(html, "html.parser")
下面的文字是汤的一部分,它是从api中获取的html信息。
treeNode2 = new Tree.TreeNode({
text: "3. asset",
id: "6",
cls: "text",
listeners: {
click: function() {viewDoc('20180515000480', '6177478', '6', '58846', '899', 'dart3.xsd');}
}
});
cnt++;
我想读
6177478
来自
{viewDoc('20180515000480', '6177478', '6', '58846', '899', 'dart3.xsd');}
我认为正则表达式将有助于检测数据。但是,我根本没有使用过正则表达式,所以请帮助我。
**这段代码是我尝试读取的数据,但是根本没有用。
pattern = re.compile(r'\.viewDoc\("\d", "\d", "\s", "\s", "\w", "\w")', re.MULTILINE | re.DOTALL)
script = soup.find_all(pattern)
谢谢您的建议。
答案 0 :(得分:0)
首先,我看到您的正则表达式使用与输入不同的引号。在这里
{viewDoc('20180515000480', '6177478', '6', '58846', '899', 'dart3.xsd');}
为'
,而您的正则表达式为"
-则此匹配。
第二个-在您的示例中使用的\d
character class仅匹配一个字符。如果知道要匹配的字符数,则可以这样指定重复:
\d{1,4}
1至4个字符-012
,9
将匹配,但1123445682
不会匹配,因为它太长了\d{1,}
一个或多个字符-写得更好的\d+
\d{0,}
零个或多个字符-写得更好的\d*
您可以阅读有关repetition in Python docs的更多信息(我真的认为它们很棒!)。
此外,这里需要指定capturing group,因此当您使用长正则表达式时,只会返回组中的内容。 这是一个简单的示例,它是如何工作的
>>> p = re.compile(r'\b(\d+)\b')
>>> p.findall('my lucky number is 13 not 7')
['13', '7']
如果只想匹配第二个数字(如您的情况),则可以在编写正则表达式时使用上下文的知识:
>>> p = re.compile(r'\d+ not (\d+)')
>>> p.findall('my lucky number is 13 not 7')
['7']
总而言之,您应该使用捕获组,并确保使用正确的重复说明符,这是示例regexp,应该对您有用:
>>> string = "{viewDoc('20180515000480', '6177478', '6', '58846', '899', 'dart3.xsd');}"
>>> pattern = re.compile(r'viewDoc\(\'\d+\', \'(\d+)\', .+\)', re.MULTILINE | re.DOTALL)
>>> pattern.findall(string)
['6177478']
编辑:
另外,对于BeautifulSoup,我建议使用其方法find_all()
,例如they show in the docs:
soup.find_all(string=pattern)
引用文档以澄清其作用(强调我的意思):
使用
string
,您可以搜索字符串而不是标签。 (...),您可以传入字符串,正则表达式,列表,函数或值True。