Tomcat 서버에서 서비스 목록을 추출하여 데이터베이스에 삽입하는 코드가 있습니다. 의 도움 후xpath 출력을 두 변수로 나눠서 데이터베이스에 삽입하는 우아한 방법
<TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>name</B></TD>
<TD>Loader</TD>
</TR>
<TR>
<TD valign="top"><B>enabled</B></TD>
<TD>true</TD>
</TR>
<TR>
<TD valign="top"><B>loadok</B></TD>
<TD>13</TD>
</TR>
</TABLE>
<TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>name</B></TD>
<TD>tester</TD>
</TR>
<TR>
<TD valign="top"><B>enabled</B></TD>
<TD>false</TD>
</TR>
<TR>
<TD valign="top"><B>loadok</B></TD>
<TD>13</TD>
</TR>
</TABLE>
는 다음, 실제 코드 (느릅 나무 작품)
#!/usr/bin/env python
import psycopg2
import urllib2
import base64
import sys
import re
import lxml.html as LH
con = None
try:
con = psycopg2.connect(database='xx', user='xx',password='xx',host='vxx')
cur = con.cursor()
qry ="select iservers.env,iservers.family,iservers.prefix,iservers.iserver,iservers.login,iservers.password,services.service," +\
"proxy_access.proxy_server,proxy_access.proxy_user,proxy_access.proxy_pass " +\
"from services,iservers,proxy_access where iservers.env='TEST' and services.id='2' "
cur.execute(qry)
data = cur.fetchall()
for result in data:
env = result[0]
family = result[1]
prefix = result[2]
iserver = result[3]
login = result[4]
password = result[5]
service = result[6]
proxyHost = result[7]
proxyUser = result[8]
proxyPass = result[9]
proxy_auth = "http://"+proxyUser+":"+proxyPass+"@"+proxyHost
proxy_handler = urllib2.ProxyHandler({"http": proxy_auth})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
request = urllib2.Request("http://"+iserver+service)
base64string = base64.encodestring('%s:%s' % (login, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
response = urllib2.urlopen(request)
html = response.read()
###################### CHANGE THIS TO USE A HTML PARSER
regex = r"name</B></TD>\s<TD>(.*?)</TD>\s</TR>\s<TR>\s(.*)enabled</B></TD>\s<TD>(.*)</TD>"
for m in re.finditer(regex,html):
print "inserting\t"+iserver+"\t"+m.group(1)
cur.execute("INSERT INTO pereirtc.package_status (env,family,iserver,prefix,package,status) values (%s,%s,%s,%s,%s,%s)",(env,family,iserver,prefix,m.group(1),m.group(3)))
con.commit()
###################### END
except psycopg2.DatabaseError, e:
print 'Error %s' % e
sys.exit(1)
finally:
if con:
con.close()
: Basicaly이 코드는 다음과 같은 구조의 HTML 결과에서 큰 출력 (100 개 결과)를 받게됩니다 stackoverflow, 내가 libxml "변경이 ...."블록을 변경하는 것이 좋습니다. 그래서 내가 사용하는 다음과 같은 블록을 가지고 :
('name', 'Loader')
('enabled', 'true')
그리고 내가 원하는 것은이하는에 삽입 XPath를 사용하여 결과를 삽입 : 위의 예와
doc = LH.fromstring(html)
tds = (td.text_content() for td in doc.xpath("//td"))
for td, val in zip(*[tds]*2):
if td in ("name","enabled"):
print (td,val)
, 나는 결과를 데이터 베이스. 이후 메신저 파이썬에서 시작, 메신저 내가 xpath/libxml로 할 수있는 방법에 차단.
감사합니다.
안녕을 수행하십시오 –
안녕하세요, if 조건 안에 인쇄를 삽입 한 후 솔루션에 근무 :) –