Симуляция браузера - Python - PullRequest
8 голосов
/ 02 апреля 2010

Мне нужен доступ к нескольким HTML-страницам через скрипт Python, проблема в том, что мне нужна функциональность COOKIE, поэтому простой HTTP-запрос urllib не будет работать.

Есть идеи?

Ответы [ 4 ]

14 голосов
/ 02 апреля 2010

проверить Механизировать . "Stateful программный просмотр веб-страниц в Python".
Он обрабатывает куки автоматически.

import mechanize

br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info()  # headers
print resp.read()  # content

mechanize также предоставляет API-интерфейс urllib2 с обработкой файлов cookie по умолчанию.

3 голосов
/ 02 апреля 2010

Модуль cookielib обеспечивает обработку файлов cookie для клиентов HTTP.

Модуль cookielib определяет классы для автоматической обработки файлов cookie HTTP. Это полезно для доступа к веб-сайтам, которые требуют, чтобы на клиентском компьютере были заданы небольшие фрагменты данных - cookie-файлы с помощью HTTP-ответа веб-сервера, а затем возвращены на сервер в последующих HTTP-запросах.

Примеры в документе показывают, как обрабатывать куки в сочетании с urllib:

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
2 голосов
/ 02 апреля 2010

Вот что делает куки, и в качестве бонуса выполняет аутентификацию для сайта, который требует имя пользователя и пароль.

import urllib2
import cookielib
import string



def cook():
    url="http://wherever"
    cj = cookielib.LWPCookieJar()
    authinfo = urllib2.HTTPBasicAuthHandler()
    realm="realmName"
    username="userName"
    password="passWord"
    host="www.wherever.com"
    authinfo.add_password(realm, host, username, password)
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo)
    urllib2.install_opener(opener)

    # Create request object
    txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" }
    try:
        req = urllib2.Request(url, None, txheaders)
        cj.add_cookie_header(req)
        f = urllib2.urlopen(req)

    except IOError, e:
        print "Failed to open", url
        if hasattr(e, 'code'):
            print "Error code:", e.code

    else:

        print f
        print f.read()
        print f.info()
        f.close()
        print 'Cookies:'
        for index, cookie in enumerate(cj):
            print index, " : ", cookie      
        cj.save("cookies.lwp")
0 голосов
/ 23 ноября 2017

Почему бы вам не попробовать Dryscrape для этого:

Import dryscrape as d
d.start_xvfb()
Br = d.Session()
Br.visit('http://URL.COM')
#open webpage
Br.at_xpath('//*[@id = "email"]').set('user@enail.com')
#finding input by id
Br.at_xpath('//*[@id = "pass"]').set('pasword') 
Br.at_xpath('//*[@id = "submit_button"]').click()
#put id of submit button and click it

Вам не нужна библиотека lib для хранения файлов cookie, просто установите Dryscrape и сделайте это в своем стиле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...