检索很多网址

时间:2010-06-30 15:14:18

标签: python screen-scraping web-scraping

编辑:为了澄清我正在使用python,并希望在python中执行此操作。

我正在为我们大学的研究项目收集数据。基本上我需要从监控欧洲议会的网站上获取大量信息。以下是一个网站的网址如何显示的示例:

http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-0190&language=EN

地址参考部分后面的数字是指:               A7 =议会开会(以前的议会是A6等),               2010 =年,               0190 =文件编号。

我想要做的是创建一个包含不同议会所有网址的变量,这样我就可以遍历这个变量并从网站上获取信息。

P.S:我试过这个:

number = range(1,190,1) 

   for i in number: 
       search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-" + str(number[i]) +"&language=EN" 

      results = search_url 
      print results

但是这给了我以下错误: Traceback(最近一次调用最后一次):   文件“”,第7行,in IndexError:列表索引超出范围

4 个答案:

答案 0 :(得分:1)

你能用python和wget吗?循环遍历现有的会话,并创建一个字符串给wget?或者这有点矫枉过正?

答案 1 :(得分:1)

如果我理解正确的话,你只是希望能够循环讨论这些问题吗?

即。你想要A7,A6,A5 ......?

如果这是你想要的,一个简单的循环可以处理它:

for p in xrange(7,0, -1):
    parliment = "A%d" % p
    print p

对于其他值,类似的循环也可以正常工作:

for year in xrange(2010, 2000, -1):
    print year

for filenum in xrange(100,200):
    fnum = "%.4d" % filenum
    print fnum

您可以按照正确的顺序轻松嵌套循环,以生成所需的组合。 HTH!

编辑:

字符串格式化非常有用,以下是您可以使用示例执行此操作的方法:

# Just create a string with the format specifier in it: %.4d - a [d]ecimal with a
# precision/width of 4 - so instead of 3 you'll get 0003
search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A7-2010-%.4d&language=EN"

# This creates a Python generator. They're super powerful and fun to use,
# and you can iterate over them, just like a collection.
# 1 is the default step, so no need for it in this case
for number in xrange(1,190):   
    print search_url % number

String formatting带有一个带有各种说明符的字符串 - 你会识别它们,因为它们中有% - 后跟%和一个包含格式字符串参数的元组。

如果要添加年份和parliment,请将字符串更改为: search_url = "http://www.europarl.europa.eu/sides/getDoc.do?type=REPORT&mode=XML&reference=A%d-%d-%.4d&language=EN"

这里有重要的变化: 参考= A %d - %d - %.4d&安培;语言= EN

这意味着您需要传递3个小数,如下所示:

print search_url % (parliment, year, number)

答案 2 :(得分:1)

很抱歉,我不能将此作为评论,但我的分数还不够高。

查看上面评论中引用的代码,您的问题是您正在尝试添加字符串和整数。虽然有些语言可以进行即时转换(当它工作时很有用,但是当它没有时会很困惑),你必须用str()显式转换它。

应该是这样的:

"http://firstpartofurl" + str(number[i]) + "restofurl"

或者,您可以使用字符串格式(使用%等作为Wayne的答案)。

答案 3 :(得分:0)

使用硒。由于它控制使用真正的浏览器,它可以使用复杂的javascript处理网站。可以使用许多语言绑定,包括python。