Как я могу получить html контент с сайта перенаправления с защитой с помощью BeautifulSoup? - PullRequest
0 голосов
/ 07 января 2019

У меня проблемы с попыткой получить html-контент с веб-страницы.

На этом сайте: https://tmofans.com/library/manga/5763/nisekoi при нажатии на значок воспроизведения для examen в «Capitulo 230.00» открывается следующая ссылка: https://tmofans.com/goto/347231 перенаправляет вас на этот сайт: https://tmofans.com/viewer/5c187dcea0240/paginated

Проблема заключается в том, что при открытии непосредственно по этой ссылке: https://tmofans.com/goto/347231 на странице выдается сообщение 403 Forbidden. единственный способ быть перенаправленным на последнюю страницу - нажать кнопку воспроизведения на первой странице.

Я хочу получить окончательный URL-адрес, используя только ссылку tmofans.com/goto

Я пытаюсь получить html-контент, используя запросы и BeautifulSoup

import requests
from BeautifulSoup import BeautifulSoup

response = requests.get("https://tmofans.com/goto/347231") 
page = str(BeautifulSoup(response.content))

print page

Когда я делаю это с https://tmofans.com/goto/347231, я получаю только содержимое 403 Запрещенной страницы.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Этот сайт проверяет, есть ли у вас реферер с их сайта, в противном случае вы получите 403 ответа. Вы можете легко обойти это, установив реферер.

import requests
ref='https://tmofans.com'
headers = { 'Referer': ref }
r = requests.get('https://tmofans.com/goto/347231',headers=headers)
print(r.url)
print(r.status_code)

выход

https://tmofans.com/viewer/5c187dcea0240/paginated
200
0 голосов
/ 07 января 2019

Мне однажды удалось удалить некоторые защищенные страницы, используя http.client и мой браузер.

Сначала я перешел на страницу, к которой мне нужно было получить доступ, затем, используя инструменты разработчика браузера, скопировал заголовки request и использовал их в своем сценарии. Таким образом, ваш скрипт получит доступ к ресурсам так же, как ваш браузер.

Эти два метода могут помочь вам: сначала проанализируйте HTTP-запрос, чтобы получить заголовки (запрос и тело могут * также быть полезны в зависимости от вашего случая) и используйте второй для загрузки файла.

Для работы может потребоваться небольшая настройка.

from http.client import HTTPSConnection

def parse_headers(http_post):
    """Converts a header string to a dictionnary of its attributes."""

    # Regex to extract headers
    req_line = re.compile(r'(?P<method>GET|POST)\s+(?P<resource>.+?)\s+(?P<version>HTTP/1.1)')
    field_line = re.compile(r'\s*(?P<key>.+\S)\s*:\s+(?P<value>.+\S)\s*')

    first_line_end = http_post.find('\n')
    headers_end = http_post.find('\n\n')
    request = req_line.match(http_post[:first_line_end]).groupdict()
    headers = dict(field_line.findall(http_post[first_line_end:headers_end]))
    body = http_post[headers_end + 2:]

    return request, headers, body


def get_file(url, domain, headers, temp_directory):
    """
    Fetches the file located at the provided URL and returns the content.
    Uses `headers` to bypass auth.
    """
    conn = HTTPSConnection(domain)
    conn.request('GET', url, headers=headers)
    response = conn.getresponse()
    content_type = response.getheader('Content-Type')
    content_disp = response.getheader('Content-Disposition')

    # Change to whatever content type you need
    if content_type != 'application/pdf':
        conn.close()
        return
    else:
        file_content = response.read()
        conn.close()
        return file_content

Строка заголовков должна выглядеть следующим образом:

GET /fr/backend/XXXXXXXXX/845080 HTTP/1.1
Cookie: cookie_law_consented=true; landing_page=0; _ga=GA1.2.1218703015.1546948765; _gid=GA1.2.580320014.1546948765; _jt=1.735724042.1546948764; SID=5c485bfa-3f2c-425e-a2dd-32dd800e0bb3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: br, gzip, deflate
Host: XXXXX
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15
Accept-Language: fr-fr
Referer: XXXXX
Connection: keep-alive

Может меняться в зависимости от веб-сайта, но использование этих файлов позволило мне загружать файлы за логином.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...