เราสามารถใช้ 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