Requests login session - Python

Узнай цену своей работы

Формулировка задачи:

Пытаюсь авторизоваться через requests на сайте http://www.mdpi.com/ и оставаясь авторизованным спарсить его через (email авторов доступны только авторизированным пользователям). Задуманное не удается, не понимаю собственно почему, буду рад любому вкладу или толчку в нужном направлении. Собственно код:

Решение задачи: «Requests login session»

textual
Листинг программы
import requests
from bs4 import BeautifulSoup
 
login_data = {'form[email]': 'wohilas@gmail.com', 'form[password]': '2128506'}
 
base_url = 'http://www.mdpi.com'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0'}
 
session = requests.Session()
session.headers = headers
 
# log_in
r = session.get('https://susy.mdpi.com/user/login')
bs = BeautifulSoup(r.content, 'lxml')
login_data['form[_token]'] = bs.find('input', id='form__token').get('value')
 
session.post('https://susy.mdpi.com/user/login', data=login_data)
 
 
def make_soup(url):
    try:
        r = session.get(url)
        soup = BeautifulSoup(r.content, 'lxml')
        return soup
    except Exception as e:
        print(e)
        return None
 
 
example_link = 'http://www.mdpi.com/search?journal=medsci&year_from=1996&year_to=2017&page_count=200&sort=relevance&view=default'
 
 
def article_finder(soup):
    one_page_articles_divs = soup.find_all('div', class_='article-content')
    for article_div in one_page_articles_divs:
        a_link = article_div.find('a', class_='title-link')
        link = base_url + a_link.get('href')
        print(link)
        article_soup = make_soup(link)
        grab_author_info(article_soup)
 
 
def grab_author_info(article_soup):
    # title of the article
    article_title = article_soup.find('h1', class_="title").text
    print(article_title)
 
    # affiliation
    affiliations_div = article_soup.find('div', class_='art-affiliations')
    affiliation_dict = {}
    aff_indexes = affiliations_div.find_all('div', class_='affiliation-item')
    aff_values = affiliations_div.find_all('div', class_='affiliation-name')
    for i, index in enumerate(aff_indexes):  # 0, 1
        affiliation_dict[int(index.text)] = aff_values[i].text
 
    # authors names
    authors_div = article_soup.find('div', class_='art-authors')
    authors_spans = authors_div.find_all('span', class_='inlineblock')
    for span in authors_spans:
        name_and_email = span.find_all('a')  # name and email
        name = name_and_email[0].text
 
        # email
        email = name_and_email[1].get('href')[7:]
 
        # affiliation_index
        affiliation_index = span.find('sup').text
        indexes = set()
        if len(affiliation_index) > 2:
            for i in affiliation_index.strip():
                try:
                    ind = int(i)
                    indexes.add(ind)
                except ValueError:
                    pass
 
        print(name)
        for index in indexes:
            print('affiliation =>', affiliation_dict[index])
        print('email: {}'.format(email.replace('.botdefense.please.enable.javaScript.', '@')))
 
 
if __name__ == '__main__':
    article_finder(make_soup(example_link))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5