Чтение веб-страниц методами в Python и различия - PullRequest
0 голосов
/ 13 января 2019

Есть много разных способов чтения веб-страниц в Python.

Я сосредоточился на следующих методах:

  1. Получить страницу
  2. Розетка для открывания
  3. Оформление запроса

Пример получения страницы:

из urllib.request import urlretrieve

url = 'http://ce.sharif.edu/courses'
file_name = 'courses.html'

urlretrieve(url, file_name)

Пример открытия гнезда:

from urllib.request import urlopen

url = 'http://ce.sharif.edu/courses'
socket = urlopen(url)
text = str(url.readall())

socket.close()

Пример оформления запроса:

>>>import requests

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

Таким образом, проблема в том, каковы основные отличия вышеуказанных методов и их использование?

1 Ответ

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

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

1)

GET /example1.html HTTP/1.1
Accept-Encoding: identity
Host: XXXXXXXX
Connection: close
User-Agent: Python-urllib/3.5

2)

GET /example2.html HTTP/1.1
Accept-Encoding: identity
Connection: close
Host: XXXXXXXX
User-Agent: Python-urllib/3.5

Нет заметной разницы между 1) и 2.

3)

GET /example3 HTTP/1.1
Host: XXXXXXXX
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.18.4

Последнее немного отличается; это означает, что, по крайней мере, существует возможность получения разных результатов в ответе, и это будет зависеть от конфигурации сервера.

Accept-Encoding: gzip, deflate Это может привести к сжатию ответа сервером, что означает меньшее количество передаваемых данных.

Подключение: keep-alive Сервер будет держать соединение открытым для повторного использования с последующими запросами (возможно, более эффективным).

User-Agent: Многие веб-серверы адаптируют контент в зависимости от идентифицированного клиентского программного обеспечения. Я не думаю, что в этом конкретном случае будет какая-либо разница, однако это нельзя исключать полностью.

...