Коллекция статей Python с веб-сайта, который требует куки

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

from bs4 import BeautifulSoup
import requests
import urllib
from requests import session
import http.cookiejar


mainLink  = "http://infoweb.newsbank.com.proxy.lib.uiowa.edu/iw-search/we/InfoWeb?p_product=AWNB&p_theme=aggregated5&p_action=doc&p_docid=14D12E120CD13C18&p_docnum=2&p_queryname=4"




def articleCrawler(mainUrl):
    response = urllib.request.urlopen(mainUrl)
    soup = BeautifulSoup(response)
    linkList = []
    for link in soup.find_all('a'):
        print(link)

articleCrawler(mainLink)

К сожалению, я получаю ответ:

<html>
<head>
<title>Cookie Required</title>
</head>
<body>
This is cookie.htm from the doc subdirectory.
<p>
<hr>
<p>

Licensing agreements for these databases require that access be extended
only to authorized users.  Once you have been validated by this system,
a "cookie" is sent to your browser as an ongoing indication of your authorization to
access these databases.  It will only need to be set once during login.
<p>
As you access databases, they may also use cookies.  Your ability to use those databases
may depend on whether or not you allow those cookies to be set.
<p>
To login again, click <a href="login">here</a>.
</p></p></p></hr></p></body>
</html>

<a href="login">here</a>

Я пытался использовать http.cookiejar, но я не знаком с библиотекой. Я использую Python 3. Кто-нибудь знает, как принять cookie и получить доступ к статье? Спасибо.

1 ответ

Я не знаком с Python3, но в Python2 стандартным способом приема файлов cookie является включение HTTPCookieProcessor как один из обработчиков в вашем OpenerDirector,

Итак, как то так:

import cookielib, urllib, urllib2
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))

opener теперь готов открыть URL (предположительно с именем пользователя и паролем) и поместить все полученные куки в свой встроенный CookieJar:

params = urllib.urlencode({'username': 'someuser', 'password': 'somepass'})
opener.open(LOGIN_URL, params)

Если вход был успешным, opener теперь будет иметь любой токен аутентификации, который сервер предоставил ему в виде cookie. Тогда вы просто получите доступ к ссылке, которую вы хотели в первую очередь:

f = opener.open(mainLink)

Опять же, не уверен, как это переводится для Python3, но я думаю, что вы, по крайней мере, хотите cookielib.CookieJar скорее, чем http.cookiejar, Я думаю, что последний предназначен для создания содержимого файлов cookie HTTP в качестве сервера, а не для получения содержимого файлов cookie в качестве клиента.

Другие вопросы по тегам