2010-10-10 6 views
2

Здесь LINK предлагается «Объяснить, что делает JavaScript, и подражать ему в вашем коде на Python:« Это то, что я хотел бы помочь, например, мой вопрос. Как эмулировать javascript: __ doPostBack?Эмуляция javascript _dopostback в python, web scrapping

код с веб-сайта (полный исходный код страницы здесь LINK:.

<a style="color: Black;" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$gvSearchResults','Page$2')">2</a> 

Конечно, я в принципе знаю, идея, куда идти отсюда

Заранее спасибо за помощь и идеи

Хорошо, есть много сообщений, которые спрашивают, как щелкнуть кнопку javascript, когда веб-утилизация с библиотеками python механизируется, beautifulsoup ...., похоже. Я вижу, что многие ответы «не поддерживаются» используют ЭТО НЕ-питонное решение. питон решение этой проблемы принесло бы большую пользу многим. В этом свете я не ищу ответов, таких как use x, y или z, которые не являются кодом на Python или требуют взаимодействия с браузером.

+0

Вы должны добавить ссылки на текст, на который вы ссылаетесь, а не LINK. –

ответ

3

Страница механизации не означает, что вы можете эмулировать JavaScript в Python. Он говорит, что вы можете изменить скрытое поле в форме, таким образом обманув веб-сервер, который выбрал поле 1. Вам все равно нужно проанализировать цель самостоятельно.

Решение этой проблемы не будет на Python, если вы не хотите создавать интерпретатор JavaScript в Python.

My thoughts по этой проблеме привели меня к трем возможных решений:

  1. создать XULRunner приложение
  2. автоматизации браузера
  3. попытка интерпретировать код на стороне клиента

из тех, три, я только на самом деле видел обсуждение 2. Я видел что-то близко к 1 в коммерческом аппликатуре ion, где вы в основном создаете сценарии , просматривая на сайтах и ​​выбирая вещи на страницах, которые вы хотели бы, чтобы сценарий извлекался в будущем.

1 мог заставить работать со сценарием Python, приняв сериализации (JSON?) Из wsgi объектов запроса, получить приложение, чтобы принести URL, а затем отправить обработанную страницу как объект WSGI Response. Вы могли бы , возможно, обернуть некоторое промежуточное ПО вокруг urllib2, чтобы достичь этого. Overkill наверное, но о чем интересно.

2 обычно достигается посредством Selenium RC (пульт дистанционного управления), ориентированного на тестирование инструмента . Он предоставляет несколько методов, таких как getHtmlSource, но большинство людей, которых я слышал , слышал, как он получал не нравится его API.

3 Я понятия не имею. node.js очень жарко прямо сейчас, но я не коснулся его. Я никогда не мог построить spidermonkey на моей машине Ubuntu , поэтому я так и не коснулся этого.Моя догадка заключается в том, что для того, чтобы сделать это , вы предоставили бы источник HTML и ваши данные интерпретатору JS , который должен был подделать вашего User-Agent и т. Д., Если бы JavaScript хотел повторно подключиться к серверу.

1 хорошо, более технически, JavaScript совместимый User-Agent, который почти всегда является веб-браузер, используемый человеком

+0

Спасибо, за отличное объяснение, почему я не могу этого сделать :-) На самом деле, по крайней мере, сейчас у меня есть лучшее понимание проблемы. Еще раз спасибо. – Vincent

+1

Это похоже на решение. http://code.google.com/p/spynner/ – Vincent

+0

Сладкий! Приятно найти, спасибо! –

0

Лучший метод заключается в использовании веб-браузера. Мы используем iMacros for Firefox для web scraping с очень хорошим успехом. Он также работает от Python (мы используем его с C#).

Недостатком с использованием веб-браузера является то, что вы не получаете такую ​​же производительность, как с помощью безголового инструмента, такого как Mechanize. Но огромным преимуществом является то, что он работает с любым сайтом.

+0

Ну, iMacros kinda заставил меня найти http://juicedpyshell.googlecode.com/svn/trunk/doc/html/index.html, который выглядит интересным. – Vincent

+0

Интересный инструмент, который сказал, что я нахожу 'mechanize' очень медленным для наших нужд. Я использую «scrapy». –

Смежные вопросы