Запросы Python. Как оставаться в системе? - PullRequest
0 голосов
/ 13 ноября 2018

Я новичок в веб-скарпинге и хотел бы научиться делать это правильно и вежливо.Моя проблема похожа на это .

'Поэтому я пытаюсь войти и перейти на страницу, используя python и запросы.Я почти уверен, что вошел в систему, но как только я пытаюсь перейти на страницу, HTML-код, который я печатаю с этой страницы, указывает, что вы должны войти, чтобы увидеть эту страницу. '

Я проверил robots.txt на сайте, который я хотел бы почистить.Есть ли что-то, что мешает мне соскабливать?Пользовательский агент: * Disallow: / caching / Disallow: / admin3003 / Disallow: / admin5573 / Disallow: / members / Disallow: / pp / Disallow: / subdomains / Disallow: / tags / Disallow: / templates / Disallow: / bin /Disallow: / emails /

Мой код с решением по вышеуказанной ссылке, который у меня не работает:

import requests
from bs4 import BeautifulSoup

login_page = <login url>
link = <required url>

payload = {
    “username” = <some username>,
    “password” = <some password> 

} 

p = requests.post(login_page, data=payload)       
cookies = p.cookies
page_response = requests.get(link, cookies=cookies)
page_content = BeautifulSoup(page_response.content, "html.parser")

RequestsCookieJar показывает Cookie ASP.NET_SessionId = 1adqylnfxbqf5n45p0ooy345 для веб-сайта (с p.команда cookie)

Вывод p.status_code: 200

ОБНОВЛЕНИЕ:

s = requests.session()

не решает мою проблему.Я пробовал это до того, как начал изучать файлы cookie.

Обновление 2: Я пытаюсь собирать новости с определенного веб-сайта.Сначала я отфильтровал новости по поисковому слову, и на первой странице появились сохраненные ссылки с запросами Python + Beautifulsoup.Теперь я хотел бы перейти по ссылкам и извлечь из них новости.Полный текст можно увидеть только с учетными данными.Специального окна входа в систему нет, и войти можно через любую страницу.Там есть кнопка входа в систему, и при наведении на нее мыши появляется окно входа в систему, как на рисунке.Я пытался войти как через главную страницу, так и через страницу, с которой я хотел бы извлечь текст (не в одно и то же время, но в разных испытаниях).Ничего из этого не работает.Я также попытался найти токен csrf, выполнив поиск «csrf_token», «authentication_token», «csrfmiddlewaretoken»,: csrf "," auth ". Ничего не найдено в html на веб-страницах. Изображение

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете использовать request.Session (), чтобы оставаться в системе, но вы должны сохранить cookie для входа в систему в виде файла json. В приведенном ниже примере показан код удаления, который сохраняет сеанс входа в Facebook в виде файла cookie в формате json;

import selenium
import mechanicalsoup
import json
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import requests
import time

s = requests.Session()

email = raw_input("Enter your facebook login username/email: ")
password = raw_input("Enter your facebook password: ")

def get_driver():
    driver = webdriver.Chrome(executable_path = 'your_path_to_chrome_driver')
    driver.wait = WebDriverWait(driver, 3)
    return driver

def get_url_cookie(driver):
    dirver.get('https://facebook.com')
    dirver.find_element_by_name('email').send_keys(email)
    driver.find_element_by_name('pass').send_keys(password)
    driver.find_element_by_id('loginbutton').click()
    cookies_list= driver.get_cookies()
    script = open('facebook_cookie.json','w')
    json.dump(cookies_list,script)

driver = get_driver()
get_url_cookie(driver)

Приведенный выше код получает файл cookie сеанса входа в систему с помощью driver.get_cookies () и сохраняет его в виде файла json. Чтобы использовать куки, просто загрузите его с помощью;

with open('facebook_cookie.json') as c:
    load = json.load(c)
for cookie in load:
    s.cookie.set(cookie['name'],cookie['value'])
url = 'facebook.com/the_url_you_want_to_visit_on_facebook'
browser= mechanicalsoup.StatefulBrowser(session=s)
browser.open(url)

и ваша сессия загружена ...

...