繁体   English   中英

通过从文件中读取URL列表来保存网页

[英]Saving the web pages by reading the list of urls from file

我只能想到的唯一方法就是解决此问题,但它列出了一些局限性。 有人可以建议解决这个问题的另一种方式吗?

我们提供了一个带有999999 URL的文本文件。 我们必须编写一个python程序来读取此文件并将所有网页保存在名为“ saved_pa​​ge”的文件夹中。

我已经尝试解决这个问题,

import os
import urllib
save_path='C:/test/home_page/'
Name = os.path.join(save_path, "test.txt")
file = open('soop.txt', 'r')
'''all the urls are in the soop.txt file '''
for line in file:
    data = urllib.urlopen(line)
    for line in data:
        f=open(Name)
        lines=f.readlines()
        f.close()
        lines.append(line)
        f=open(Name,"w")
        f.writelines(lines)
        f.close()
file.close()

此代码有一些限制,

1)。如果网络中断,此代码将重新启动。

2)。如果遇到错误的URL(即服务器无响应),则此代码将被卡住。

3)。我目前正在按顺序下载-对于没有URL的情况,这将非常缓慢。

那么有人可以提出一种解决这些问题的解决方案吗?

一些说明:

通过重新启动点方法可以轻松固定点1和2。 对于在脚本内重新启动,只需执行一个循环,直到 for line in file包含读取部分的for line in filefor line in file全部正常或最大尝试次数为止,并且只有在成功下载文件后才进行写操作。 您仍然必须决定要处理的文件是否为不可下载状态:记录错误并继续处理下一个文件,或者中止整个作业。

如果您希望以后能够重新启动失败的作业,则应将成功下载的文件列表保留在某个位置( state.txt文件)。 在获取并写入每个文件之后,您进行写入(和冲洗 )。 但是要真正证明是布尔值,您应该在获取文件后写入一个元素,而在成功写入文件后写入一个元素。 这样,在重新启动时,您可以通过简单地测试状态文件及其内容的存在来知道输出文件可能包含部分写入的文件(停电,中断等)。

第三点要棘手得多。 要允许并行下载,您将必须使用线程或异步。 但是,您还必须同步所有这些内容,以确保以正确的顺序将文件写入输出文件。 如果您有能力将所有内容保留在内存中,则一种简单的方法是首先使用并行化方法下载所有内容(JF Sebastian提供的链接可以提供帮助),然后按顺序进行编写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM