1

除了使用 urllib 之外,有没有人知道用于快速、多线程下载可以通过 http 代理运行的 URL 的最有效包?我知道一些,例如 Twisted、Scrapy、libcurl 等,但我对它们的了解还不够多,无法做出决定,或者即使他们可以使用代理。任何人都知道对我来说最好的代理吗?谢谢!

4

2 回答 2

17

在 python 中实现这一点很简单。

urlopen() 函数对不需要身份验证的代理透明地工作。在 Unix 或 Windows 环境中,在启动 Python 解释器之前,将 http_proxy、ftp_proxy 或 gopher_proxy 环境变量设置为标识代理服务器的 URL

# -*- coding: utf-8 -*-

import sys
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
from Queue import Queue, Empty
from threading import Thread

visited = set()
queue = Queue()

def get_parser(host, root, charset):

    def parse():
        try:
            while True:
                url = queue.get_nowait()
                try:
                    content = urlopen(url).read().decode(charset)
                except UnicodeDecodeError:
                    continue
                for link in BeautifulSoup(content).findAll('a'):
                    try:
                        href = link['href']
                    except KeyError:
                        continue
                    if not href.startswith('http://'):
                        href = 'http://%s%s' % (host, href)
                    if not href.startswith('http://%s%s' % (host, root)):
                        continue
                    if href not in visited:
                        visited.add(href)
                        queue.put(href)
                        print href
        except Empty:
            pass

    return parse

if __name__ == '__main__':
    host, root, charset = sys.argv[1:]
    parser = get_parser(host, root, charset)
    queue.put('http://%s%s' % (host, root))
    workers = []
    for i in range(5):
        worker = Thread(target=parser)
        worker.start()
        workers.append(worker)
    for worker in workers:
        worker.join()
于 2009-10-27T12:36:13.880 回答
1

通常代理会根据网站的创建方式分类过滤网站。很难通过基于类别的代理传输数据。例如,youtube 被归类为音频/视频流,因此 youtube 在某些地方尤其是学校被封锁。如果您想绕过代理并从网站上获取数据并将其放入您自己的真实网站中,例如可以注册给您的 .com 网站。当您制作和注册网站时,请将您的网站归类为您想要的任何内容。

于 2011-04-27T11:48:09.763 回答