Подтвердить что ты не робот

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

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

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

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

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

Благодарим вас за помощь.

4b9b3361

Ответ 1

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

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

Ответ 2

вы можете использовать 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()

Ответ 3

Вы можете использовать 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

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

Ответ 4

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

Посмотрите 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).

Ответ 5

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

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