เราสามารถใช้ python อ่านเนื้อหาจากเว็บได้โดยใช้โมดุล urllib
เอาตัวอย่างจาก Dive into Python - 11.2. How not to fetch data over HTTP
>>> import urllib >>> data = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read() 1 >>> print data <?xml version="1.0" encoding="iso-8859-1"?> <feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"> <title mode="escaped">dive into mark</title> <link rel="alternate" type="text/html" href="http://diveintomark.org/"/> <-- rest of feed omitted for brevity -->
ด้วยวิธีนี้เราสามารถนำเข้าไฟล์สตรีมทั้งหลายได้โดยสะดวก
จากตอนก่อน เราสามารถนำมาสร้างสคริปต์ง่าย ๆ เอาไว้เก็บเนื้อหาของหน้าเว็บได้ดังนี้
$ vi d.getweb.py
#!/usr/bin/env python # SAVE CONTENT OF WEB PAGE TO FILE import sys, os, urllib def usage(progname): print "Usage: %s URL FILENAME" % (progname) print "Save content of web page to file." def cannotopenfile(filename="",readwrite="r"): if readwrite=="r": msg=" reading" else: msg=" writing" print "Cannot open file %s for %s." % (filename, readwrite) def genfilename(filename="",ext="new"): if filename=="": return "" if ext.lower()!="new" and ext.lower()!="bak": ext="bak" if os.path.exists(filename+"."+ext): i=0 while os.path.exists(filename+"."+ext+str(i)) and (i < 1000): i=i+1 if i>999: return "" return filename+"."+ext+str(i) else: return filename+"."+ext # if __name__=="__main__": progname=os.path.basename(sys.argv[0]) try: url=sys.argv[1] filename=sys.argv[2] except: usage(progname) sys.exit(1) # try: if os.path.exists(filename): bakfile=genfilename(filename,"bak") os.rename(filename,bakfile) except: cannotopenfile(filename,"w") sys.exit(1) # try: data=urllib.urlopen(url).read() except: print "Cannot open %s." % (url) sys.exit(1) # f=open(filename,"w") f.write(data) f.close() print "Save %s to %s success." % (url, filename)
เรียกใช้งานด้วยคำสั่ง
./d.getweb.py http://WEB.TO.GET FILENAME.EXT