Найти - Пользователи
Полная версия: Urlopen отдает не всю старницу
Начало » Python для новичков » Urlopen отдает не всю старницу
1 2
Alex_HH
o7412369815963
вот http://www.python-requests.org/en/latest/user/quickstart/#custom-headersсписок параметров возмите у себя из браузера:
Большое спасибо!
А стандартной бибилиотекой такое провернуть можжно?

пс. мне скачать и установить не лень, просто интересно.
py.user.next
>>> import urllib.request
>>> 
>>> headers = {
...     'Host': 'my-svadba.ru',
...     'User-Agent': 'Mozilla/5.0 (X11; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0',
...     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
...     'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
...     #'Accept-Encoding': 'gzip, deflate',
...     #'DNT': '1',
...     #'Connection': 'keep-alive'
... }
>>> 
>>> r = urllib.request.Request(
...     'http://my-svadba.ru/company/item/59109/#3|2014',
...     headers=headers
... )
>>> 
>>> data = urllib.request.urlopen(r)
>>> html = data.read().decode(data.headers.get_content_charset() or 'utf-8')
>>> 
>>> print(html[:100], html[-200:], sep='\n\t***\n')
 
 
 
 
 
 
 
 
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/
        ***
               Днепропетровск
                      <input type="hidden" value="126" />
                    </a>
                  </dd>
                  
                                    <dd>
   
>>>
Alex_HH
все равно не работатет. я ему даже куки скормил, не работает.
py.user.next Ваш код тоже выдает не до конца текст, как и мой.

import urllib.request
 
headers = { 
        'Host': 'my-svadba.ru',
        'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0',
        'Accept':'Language: ru-ru,ru;q=0.8,uk;q=0.6,en-us;q=0.4,en;q=0.2',
        'Accept':'Encoding: gzip, deflate',
        'Cookie': '_ym_visorc_157614=w; PHPSESSID=72pm17q9m55qt5d88kca1ebnn1',
        'Connection': 'keep-alive',
        'Cache-Control': 'max-age=0',
        }
r = urllib.request.Request('http://my-svadba.ru/company/item/59109/#3|2014',headers=headers)
 
data = urllib.request.urlopen(r)
html = data.read()#.decode(data.headers.get_content_charset() or 'utf-8')
 
#print(html)
print(html[:100], html[-200:], sep='\n\t***\n')
py.user.next
это из-за
Connection: close

python.org. urllib.request
urllib.request module uses HTTP/1.1 and includes Connection:close header in its HTTP requests.

Firefox отправляет keep-alive, а питон отправляет close (даже если ставишь keep-alive)
(посмотрел через wireshark)

add
не, там ещё запутаннее, keep-alive тоже не помогает
(через netcat проверил)
Alex_HH
Победа! Victory!
Заработатло!
o7412369815963, Ваш совет помог, большое спасибо!
py.user.next, спасибо за инфу!
Всем остальным тоже огромное спасибо!
Работает даже без отправки заголовков, так что py.user.next, Ваше замечание верно на все 200%
привожу скрипт и его вывод. юху, круто, тему можно закрывать.

скрипт:
import urllib.request
import requests
import json
url = 'http://my-svadba.ru/company/item/59109'
payload = {'some': 'data'}
headers = { 
        'Host': 'my-svadba.ru',
        'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0',
        'Accept':'Language: ru-ru,ru;q=0.8,uk;q=0.6,en-us;q=0.4,en;q=0.2',
        'Accept':'Encoding: gzip, deflate',
        'Cookie': '_ym_visorc_157614=w; PHPSESSID=72pm17q9m55qt5d88kca1ebnn1',
        'Connection': 'keep-alive',
        'Cache-Control': 'max-age=0',
          }
r = requests.get(url, data=json.dumps(payload), headers=headers)
print(r.content.decode('utf-8'))

результат работы:
python -u 544544546.py
Process started >>>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Powered by LIMB | http://www.limb-project.com/ -->
<!-- Designed by BIT | http://www.bit-creative.com/ -->
<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
  <title>
        Сергей и Алина Казины — фото и видео Пенза Портфолио
  </title>
  <meta name="description" content="Скидки на бронирование фото и видео до 1.04.
В мае и июне фотокнига в подарок">
  <meta name="keywords" content="Фотографы, Студийная фотосъемка, Видеографы, Пенза, Саранск, Самара, Саратов, Москва, Тольятти, Сергей и Алина Казины — фото и видео">
  <link rel="stylesheet" type="text/css" href="/styles/main.css?2013-07-08" />
  <link rel="stylesheet" type="text/css" href="/styles/jquery-ui.css?2013-07-08" />
  <link rel="stylesheet" type="text/css" href="/styles/fancybox.css?2013-07-08" />
  <!--[if lt IE 8]><link rel="stylesheet" type="text/css" href="/styles/ie.css?2013-07-08" /><![endif]-->
  <!--[if lt IE 7]><link rel="stylesheet" type="text/css" href="/styles/ie6.css?2013-07-08" /><![endif]-->
  
------*****тут вырезанно мною****-----
  </script>
  <!-- Yandex.Metrika counter -->
<div style="display:none;"><script type="text/javascript">
(function(w, c) {
    (w[c] = w[c] || []).push(function() {
        try {
            w.yaCounter157614 = new Ya.Metrika({id:157614, enableAll: true, webvisor:true});
        }
        catch(e) { }
    });
})(window, "yandex_metrika_callbacks");
</script></div>
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript" defer="defer"></script>
<noscript><div><img src="//mc.yandex.ru/watch/157614" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</body>
</html>
<<< Process finished. (Exit code 0)
================ READY ================
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB