Почему urllib.urlopen.read () не соответствует исходному коду?

Я пытаюсь найти следующую веб-страницу:

import urllib urllib.urlopen("http://www.gallimard-jeunesse.fr/searchjeunesse/advanced/(order)/author?catalog[0]=1&SearchAction=1").read() 

Результат не соответствует тому, что я вижу при проверке исходного кода веб-страницы с помощью Google Chrome.

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

Спасибо за помощь.

  • Как надежно обрабатывать веб-данные в Python
  • Как получить URL-адрес не-ascii с помощью urlopen Python?
  • небуферизованный urllib2.urlopen
  • Веб-скребок urlopen в python
  • как бороться с ® в url для urllib2.urlopen?
  • таймаут для urllib2.urlopen () в версиях pre Python 2.6
  • Python проверяет, существует ли сайт
  • Использовать «байт-подобный объект» из urlopen.read с JSON?
  • 5 Solutions collect form web for “Почему urllib.urlopen.read () не соответствует исходному коду?”

    То, что вы получаете от urlopen – это сырая веб-страница, означающая, что javascript не выполняется. Css не используется; где то, что вы получаете от Chrome (или других браузеров), является окончательной веб-страницей, которая включает исполняемый javascript (который может изменить HTML), рендеринг css и т. д., все из которых не происходит в urlopen

    Отсюда разница, надеюсь, это ясно

    вы можете использовать python Selenium для решения вашей проблемы. Вот пример кода.

     from selenium import webdriverr url = "http://www.gallimard-jeunesse.fr/searchjeunesse/advanced/(order)/author?catalog[0]=1&SearchAction=1" browser = webdriver.Firefox() browser.get(url) sleep(10) all_body_id_html = browser.find_element_by_id('body') # you can also get all html 

    Тогда из-за вашего остального работы по вашему выбору еще один пример с экземпляром браузера

     def login(user='ssdf', password="cisin123"): content = browser.find_element_by_id('content') content.find_element_by_xpath('.//tbody/tr[2]//input[contains(@class,"textbox")]').send_keys(user) content.find_element_by_xpath('.//tbody/tr[3]//input[contains(@class,"textbox")]').send_keys(password) content.find_element_by_css_selector(".button").click() 

    Вы можете использовать Selenium с Firefox для решения проблемы, но во многих случаях она может оказаться непригодной, поскольку браузер вызывается каждый раз, когда вы запускаете код. Другая идея – использовать безголовый брейзер, такой как PhantomJS.

    Лучший способ для этого – использовать библиотеку механизации. Установите механизацию по трубопроводу.

     pip install mechanize 

    Затем вы можете использовать следующий код:

     import mechanize mb = mechanize.Browser() mb.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] mb.set_handle_robots(False) url = "http://www.gallimard-jeunesse.fr/searchjeunesse/advanced/(order)/author?catalog[0]=1&SearchAction=1" response = mb.open(url).read() print response 

    Он также предоставляет возможность для сна и выполнения сценариев. Вы можете прочитать их в документации.

    Кроме того, на некоторых веб-сайтах есть так называемый переключатель браузера, который может привести к тому, что при использовании разных браузеров будет отображаться другой источник (например, показать легкую версию для мобильных браузеров).

    Посмотрите на http://www.diveintopython.net/http_web_services/user_agent.html на то, как изменить User-Agent на что-то вроде «Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.1 (KHTML, например, Gecko) Chrome / 21.0.1180.89 Safari / 537.1 "(который фактически является моим User-Agent).

    Похоже, вам нужна библиотека, которая может действовать как браузер и запускать javascript для вас, а затем дать вам исходный код. Ветряная мельница должна быть в состоянии сделать это за вас. ( http://www.getwindmill.com/ )

    Существует хорошая статья о том, как использовать его для чего вы хотите здесь:
    http://www.packtpub.com/article/web-scraping-with-python

    Python - лучший язык программирования в мире.