0

我正在制作一个 Python 脚本来验证 Wikipedia 链接链是否有效。例如,链

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

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

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

所以我想知道的是我是否可以使用urllib2(或任何其他库)下载每个页面并告诉它在需要时停止,或者这只会给 CPU 增加更多负载并使事情变得更糟。

4

3 回答 3

1

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

于 2012-07-01T00:21:23.867 回答
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

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

于 2012-07-20T17:36:26.250 回答
0

您最好使用来自 Wikipedia的静态快照。

于 2012-06-30T23:34:23.947 回答