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))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д