xpath - sweb - Some web helper scripts.
(HTM) git clone git://r-36.net/sweb
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
xpath (1191B)
---
1 #!/usr/bin/env python
2 #
3 # Copy me if you can.
4 # by 20h
5 #
6
7 import os
8 import sys
9 import getopt
10 from lxml import etree
11
12 def getxpath(fd, xpath, attribute=None, encoding=None):
13 try:
14 parser = etree.HTMLParser(encoding=encoding)
15 xml = etree.parse(fd, parser)
16 sels = xml.xpath(xpath)
17 except AssertionError:
18 return None
19
20 if attribute != None:
21 return "\n".join(["".join(i.attrib[attribute]) for i in sels])
22
23 return "".join([("".join(i.itertext())).strip() for i in sels])
24
25 def usage(app):
26 app = os.path.basename(app)
27 sys.stderr.write("usage: %s [-h] [-e encoding] "\
28 "[-a attribute] xpath\n" % (app))
29 sys.exit(1)
30
31 def main(args):
32 try:
33 opts, largs = getopt.getopt(args[1:], "he:a:")
34 except getopt.GetoptError as err:
35 print(str(err))
36 usage(args[0])
37
38 encoding = None
39 attribute = None
40 for o, a in opts:
41 if o == "-h":
42 usage(args[0])
43 elif o == "-e":
44 encoding = a
45 elif o == "-a":
46 attribute = a
47 else:
48 assert False, "unhandled option"
49
50 if len(largs) < 1:
51 usage(args[0])
52
53 rpath = getxpath(sys.stdin, largs[0], attribute, encoding)
54 if rpath == None:
55 return 1
56
57 sys.stdout.write(rpath)
58
59 return 0
60
61 if __name__ == "__main__":
62 sys.exit(main(sys.argv))
63