Извлечение страниц из what.cd - PullRequest
1 голос
/ 10 октября 2011

Я работаю над скребком экрана, используя BeautifulSoup для what.cd, используя Python.Я наткнулся на этот скрипт во время работы и решил посмотреть на него, так как он, похоже, похож на тот, над которым я работаю.Однако каждый раз, когда я запускаю сценарий, я получаю сообщение о том, что мои учетные данные неверны, даже если они не таковы.

Насколько я могу судить, я получаю это сообщение, потому что когда сценарий пытается войти в системув what.cd what.cd должен возвращать cookie, содержащий информацию, которая позволяет мне запрашивать страницы позже в скрипте.Итак, сценарий не работает:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username,
                               'password' : password})
check = opener.open('http://what.cd/login.php', login_data)
soup = BeautifulSoup(check.read())
warning = soup.find('span', 'warning')
if warning:
    exit(str(warning)+'\n\nprobably means username or pw is wrong')

Я пробовал несколько методов аутентификации на сайте, включая использование CookieFileJar, сценарий, расположенный здесь , и модуль запросов.Я получил одно и то же сообщение HTML с каждым.Короче говоря, «Javascript отключен» и «Cookies отключены», а также предоставляет поле для входа в HTML.

Я действительно не хочу возиться с Mechanize, но я неНе вижу другого способа сделать это в данный момент.Если кто-нибудь может оказать какую-либо помощь, это будет с благодарностью.

1 Ответ

1 голос
/ 11 октября 2011

После нескольких часов поиска я нашел решение своей проблемы. Я все еще не уверен, почему этот код работает в отличие от версии выше, но это работает. Вот код, который я использую сейчас:

import urllib
import urllib2
import cookielib

cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

request = urllib2.Request("http://what.cd/index.php", None)
f = urllib2.urlopen(request)
f.close()

data = urllib.urlencode({"username": "your-login", "password" : "your-password"})
request = urllib2.Request("http://what.cd/login.php", data)
f = urllib2.urlopen(request)

html = f.read()
f.close()

Кредит поступает на carl.waldbieser с linuxquestions.org . Спасибо всем, кто высказал свое мнение.

...