Как выполнить urllib2 запросы через Скалистую вершину в Python?

Я имел связанный вопрос о получении развертываемого набора файлов от автоматизированной сборки. Я нашел, что веб-Проекты Развертывания (ссылки и все в старом вопросе) сделали то, в чем я нуждался - они - дополнение VS и MSBuild.

49
задан Obito 20 October 2016 в 04:10
поделиться

3 ответа

Using privoxy as http-proxy in front of tor works for me - here's a crawler-template:


import urllib2
import httplib

from BeautifulSoup import BeautifulSoup
from time import sleep

class Scraper(object):
    def __init__(self, options, args):
        if options.proxy is None:
            options.proxy = "http://localhost:8118/"
        self._open = self._get_opener(options.proxy)

    def _get_opener(self, proxy):
        proxy_handler = urllib2.ProxyHandler({'http': proxy})
        opener = urllib2.build_opener(proxy_handler)
        return opener.open

    def get_soup(self, url):
        soup = None
        while soup is None:
            try:
                request = urllib2.Request(url)
                request.add_header('User-Agent', 'foo bar useragent')
                soup = BeautifulSoup(self._open(request))
            except (httplib.IncompleteRead, httplib.BadStatusLine,
                    urllib2.HTTPError, ValueError, urllib2.URLError), err:
                sleep(1)
        return soup

class PageType(Scraper):
    _URL_TEMPL = "http://foobar.com/baz/%s"

    def items_from_page(self, url):
        nextpage = None
        soup = self.get_soup(url)

        items = []
        for item in soup.findAll("foo"):
            items.append(item["bar"])
            nexpage = item["href"]

        return nextpage, items

    def get_items(self):
        nextpage, items = self._categories_from_page(self._START_URL % "start.html")
        while nextpage is not None:
            nextpage, newitems = self.items_from_page(self._URL_TEMPL % nextpage)
            items.extend(newitems)
        return items()

pt = PageType()
print pt.get_items()
2
ответ дан 7 November 2019 в 11:56
поделиться

Возможно, у вас проблемы с подключением к сети? Приведенный выше сценарий сработал для меня (я заменил другой URL - я использовал http://stackoverflow.com/ - и я получил страницу, как ожидалось:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
 <html> <head>

<title>Stack Overflow</title>        
<link rel="stylesheet" href="/content/all.css?v=3856">

(и т. Д.)

1
ответ дан 7 November 2019 в 11:56
поделиться
[

] Вы пытаетесь подключиться к порту SOCKS - Tor отвергает любой не-SOCKS трафик. Вы можете подключиться через посредника - Privoxy - используя порт 8118.[

] [

]Пример:[

] [
proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
opener = urllib2.build_opener(proxy_support) 
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
print opener.open('http://www.google.com').read()
] [

]Также обратите внимание на свойства, переданные ProxyHandler, без префикса http на ip:port[

].
21
ответ дан 7 November 2019 в 11:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: