Пакет Python для многопоточного паука с поддержкой прокси? - PullRequest
1 голос
/ 27 октября 2009

Вместо использования urllib кто-нибудь знает о наиболее эффективном пакете для быстрой многопоточной загрузки URL-адресов, который может работать через http-прокси? Я знаю несколько таких, как Twisted, Scrapy, libcurl и т. Д., Но я не знаю достаточно о них, чтобы принять решение или даже если они могут использовать прокси-серверы. Кто-нибудь знает лучший из них для моих целей? Спасибо!

Ответы [ 2 ]

17 голосов
/ 27 октября 2009

просто реализовать это в Python.

Функция urlopen () работает прозрачно с прокси, которые делают не требует аутентификации. В юниксе или Windows, установите http_proxy, ftp_proxy или gopher_proxy переменные среды на URL, который определяет прокси-сервер до запуск интерпретатора Python

# -*- 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()
1 голос
/ 27 апреля 2011

обычно прокси фильтруют сайты категорически в зависимости от того, как был создан сайт. Трудно передавать данные через прокси на основе категорий. Например, YouTube классифицируется как аудио / видео потоки, поэтому YouTube блокируется в некоторых местах, особенно в школах. Если вы хотите обойти прокси-серверы, получить данные с веб-сайта и поместить их на свой собственный подлинный веб-сайт, например веб-сайт dot com, который можно зарегистрировать для вас. Когда вы создаете и регистрируете веб-сайт, классифицируйте свой веб-сайт как угодно.

...