我有以下链接:
url 的参考部分有以下信息:
A7 ==议会(现任为第七届议会,前为A6等)
2010 == 年
0001 == 文件编号
对于每年和议会,我想确定网站上的文件数量。任务很复杂,例如,对于 2010 年,数字 186、195,196 有空页,而最大数字是 214。理想情况下,输出应该是一个包含所有文档编号的向量,不包括丢失的文档编号。
谁能告诉我这在python中是否可行?
最好的,托马斯
我有以下链接:
url 的参考部分有以下信息:
A7 ==议会(现任为第七届议会,前为A6等)
2010 == 年
0001 == 文件编号
对于每年和议会,我想确定网站上的文件数量。任务很复杂,例如,对于 2010 年,数字 186、195,196 有空页,而最大数字是 214。理想情况下,输出应该是一个包含所有文档编号的向量,不包括丢失的文档编号。
谁能告诉我这在python中是否可行?
最好的,托马斯
首先,确保抓取他们的网站是合法的。
其次,请注意,当文档不存在时,HTML 文件包含:
<title>Application Error</title>
第三,使用 urllib 迭代所有你想要的东西:
for p in range(1,7):
for y in range(2000, 2011):
doc = 1
while True:
# use urllib to open the url: (root)+p+y+doc
# if the HTML has the string "application error" break from the while
doc+=1
这是一个稍微更完整(但很老套)的示例,它似乎可以工作(使用 urllib2)——我相信您可以根据您的特定需求对其进行自定义。
我还要重复 Arrieta 的警告,即确保网站所有者不介意你抓取它的内容。
#!/usr/bin/env python
import httplib2
h = httplib2.Http(".cache")
parliament = "A7"
year = 2010
#Create two lists, one list of URLs and one list of document numbers.
urllist = []
doclist = []
urltemplate = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=%s-%d-%04u&language=EN"
for document in range(0,9999):
url = urltemplate % (parliament,year,document)
resp, content = h.request(url, "GET")
if content.find("Application Error") == -1:
print "Document %04u exists" % (document)
urllist.append(urltemplate % (parliament,year,document))
doclist.append(document)
else:
print "Document %04u doesn't exist" % (document)
print "Parliament %s, year %u has %u documents" % (parliament,year,len(doclist))
这是一个解决方案,但在请求之间添加一些超时是个好主意:
import urllib
URL_TEMPLATE="http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-%d-%.4d&language=EN"
maxRange=300
for year in [2010, 2011]:
for page in range(1,maxRange):
f=urllib.urlopen(URL_TEMPLATE%(year, page))
text=f.read()
if "<title>Application Error</title>" in text:
print "year %d and page %.4d NOT found" %(year, page)
else:
print "year %d and page %.4d FOUND" %(year, page)
f.close()