下载直到Python达到某一点

时间:2012-06-30 23:32:48

标签: python sockets urllib2

我制作了一个Python脚本,用于验证Wikipedia链接链是否有效。例如,链

List of jōyō kanji > Elementary schools in Japan > Education > Knowledge

是有效的,因为您只能通过点击链接访问每个页面。

这里的问题是这些页面很长并且下载整个页面,检查链接是否在页面中并且重复所有步骤将花费很长时间。链条也可能更长。

所以我想知道的是,如果我可以使用urllib2(或任何其他库)下载每个页面并告诉它在需要时停止,或者这只会给CPU带来更多负担并制作东西差。

3 个答案:

答案 0 :(得分:1)

为什么要重复这些步骤。您应该能够并行执行这些操作,因为每个步骤应该彼此独立。

答案 1 :(得分:0)

使用维基百科中的static snapshot可能会更好。

答案 2 :(得分:0)

我找不到使用urllib2的方法,但有一个明显的解决方案使用原始套接字:

import urlparse

def found(text, data):
     # return True if text was found in data

def get_title(url):
    parsed_url = urlparse(url)
    host = parsed_url.netloc
    path = parsed_url.path
    port = 80

    web = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        web.connect((host, port))
    except Exception:
        return

    web.send('GET %s HTTP/1.1\n' % path)
    web.send('Host: %s\n' % host)
    web.send('\n')

    done = False
    while not done:
        data = web.recv(2048)
        if len(data) > 0 and found("text", data):
            web.shutdown(socket.SHUT_RDWR)
            web.close()
            title = title_match.group(1)
            done = True

    # Do something

这样您就可以在找到相关数据后停止下载,并避免从大型网页下载不必要的内容。