使用Python下载一系列网页

时间:2014-05-15 22:32:47

标签: python python-2.7 urllib2

我是Python [运行2.7.x]的新手,我正在尝试从包含数千个链接的网页下载内容。这是我的代码:

import urllib2
i = 1
limit = 1441

for i in limit: 
    url = 'http://pmindia.gov.in/content_print.php?nodeid='+i+'&nodetype=2'
    response = urllib2.urlopen(url)
    webContent = response.read()
    f = open('speech'+i+'.html', 'w')
    f.write(webContent)
    f.close

相当基本,但我得到其中一个或两个错误&#int; int对象不可迭代'或者'不能连接str和int'。这些是此页面上链接的可打印版本:http://pmindia.gov.in/all-speeches.php(1400个链接)。但节点ID从1到1441,这意味着缺少41个数字(这是一个单独的问题)。最后的最后一个问题:从长远来看,在下载数千个链接对象时,有没有办法并行运行它们以提高处理速度?

3 个答案:

答案 0 :(得分:0)

试试这个:

for i in range(1, limit + 1):
...

range(M,N)返回从M(包括)到N(不包括)的数字列表。 见https://docs.python.org/release/1.5.1p1/tut/range.html

答案 1 :(得分:0)

您可能希望使用Scrapy或其他一些网络抓取框架来帮助您解决此问题。

答案 2 :(得分:0)

您的代码中存在一些错误。

  1. 你得到了错误的语法。当你调用for循环时,你需要传递一个它可以迭代的对象。这可以是列表或生成器
  2. 在字符串中添加数字将不起作用。您需要转换为例如repr
  3. 使用这些修补程序,您的代码看起来像

    import urllib2
    i = 1
    limit = 1441
    
    for i in xrange(1,limit+1): 
        url = 'http://pmindia.gov.in/content_print.php?nodeid='+repr(i)+'&nodetype=2'
        response = urllib2.urlopen(url)
        webContent = response.read()
        f = open('speech'+repr(i)+'.html', 'w')
        f.write(webContent)
        f.close
    

    现在,如果您想真正进行网页报道,我建议您查看一些包,例如lxmlrequests