Мне было интересно, можно ли «автоматизировать» задачу ввода записей для поиска форм и извлечения совпадений из результатов. Например, у меня есть список журнальных статей, для которых я хотел бы получить DOI (идентификатор цифрового объекта); вручную для этого я бы зашел на страницу поиска статей в журналах (например, http://pubs.acs.org/search/advanced), введите авторов/заголовок/объем (и т. д.), а затем найдите статью из списка возвращаемых результатов и выберите DOI и вставьте это в мой список ссылок. Я регулярно использую R и Python для анализа данных (я был вдохновлен сообщением о RCURL), но мало знаю о веб-протоколах ... возможно ли это (например, используя что-то вроде BeautifulSoup от Python?). Есть ли хорошие ссылки для того, чтобы делать что-то отдаленно похожее на эту задачу? Мне так же интересно узнать о веб-соскабливании и инструментах для веб-очистки в целом, как и для выполнения этой конкретной задачи ... Спасибо за ваше время!веб-скребок для заполнения (и извлечения) форм поиска?
ответ
Beautiful Soup отлично подходит для разбора webpages-, что половина того, что вы хотите сделать. Python, Perl, и Руби все имеют версию Mechanize, и это другая половина:
http://wwwsearch.sourceforge.net/mechanize/
механизировать давайте вы контролируете браузер:
# Follow a link
browser.follow_link(link_node)
# Submit a form
browser.select_form(name="search")
browser["authors"] = ["author #1", "author #2"]
browser["volume"] = "any"
search_response = br.submit()
С Mechanize и Beautiful Soup у вас есть отличный старт. Один дополнительный инструмент, который я бы рассмотреть Firebug, используемый в этом кратком руководстве рубина очищающего:
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug может ускорить вашу конструкцию XPaths для разбора документов, экономя некоторое время серьезного.
Удачи вам!
Отлично! Спасибо, очень полезно! – hatmatrix
Стивен! Отметьте мне ответ! Я участвую в коллективе до 100 очков :-) – mixonic
Я пытаюсь! Я только что получил OpenID, но он говорит мне, что у меня должно быть 15 репутации, чтобы проголосовать? Извините, первый раз на stackoverflow ... это сложно? – hatmatrix
WebRequest req = WebRequest.Create("http://www.URLacceptingPOSTparams.com");
req.Proxy = null;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
//
// add POST data
string reqString = "searchtextbox=webclient&searchmode=simple&OtherParam=???";
byte[] reqData = Encoding.UTF8.GetBytes (reqString);
req.ContentLength = reqData.Length;
//
// send request
using (Stream reqStream = req.GetRequestStream())
reqStream.Write (reqData, 0, reqData.Length);
string response;
//
// retrieve response
using (WebResponse res = req.GetResponse())
using (Stream resSteam = res.GetResponseStream())
using (StreamReader sr = new StreamReader (resSteam))
response = sr.ReadToEnd();
// use a regular expression to break apart response
// OR you could load the HTML response page as a DOM
(адаптировано из Джо Albahri в «C# в двух словах»)
Спасибо - приятно знать, что это возможно! ...Я предполагаю. (не слишком знакомы с .NET, хотя я слышал, что это все ярость ...) – hatmatrix
Существует множество инструментов для веб-соскабливания. Существует хороший плагин firefox под названием iMacros. Он отлично работает и не нуждается ни в каких знаниях программирования. Бесплатная версия может быть загружена отсюда: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ Лучшая вещь в iMacros - это то, что она может начать вас через несколько минут, а также может быть запущена из командной строки bash и также может быть вызвана из сценариев bash.
Более продвинутым шагом будет selenium webdrive. Причина, по которой я выбрал селен, заключается в том, что он хорошо документирован для новичков. только следующее: page:
поможет вам быстро и быстро запустить вас. Selenium поддерживает java, python, php, c, поэтому, если вы знакомы с любым из этих языков, вы будете знакомы со всеми необходимыми командами. Я предпочитаю изменение седана webdrive, так как он открывает браузер, так что вы можете проверить поля и выходы. После настройки скрипта с помощью webdrive вы можете легко перенести сценарий в IDE, тем самым бегая без головы.
Чтобы установить селен можно сделать с помощью команды
sudo easy_install selenium
Это будет заботиться о зависимостях и все необходимые для вас.
Для того, чтобы запустить сценарий в интерактивном режиме, просто откройте терминал и введите
python
вы увидите питон подсказку, >>> и вы можете ввести команды.
Вот пример кода, который можно вставить в терминале, он будет искать Google для слова сыры
package org.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Example {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
driver.quit();
}}
Я надеюсь, что это может дать вам фору.
Cheers :)
Сначала вы говорите пользователю, чтобы установить Selenium Client для Python; но ваш код-пример - это код Java. Это смущает. – knb
- 1. Java и Selenium для заполнения веб-форм?
- 2. pdo для извлечения данных и заполнения записи
- 3. JS bookmark для заполнения форм
- 4. Автоматический инструмент/API для заполнения веб-форм
- 5. Автоматизация заполнения форм
- 6. Контейнер данных для быстрого поиска и извлечения
- 7. Excel помощь, необходимая для поиска и извлечения
- 8. Использование XDocument для поиска и извлечения данных
- 9. Границы поиска и заполнения изображений
- 10. JQuery плагин для завершения заполнения форм
- 11. Как выполнить цикл заполнения форм?
- 12. Команда Windows для поиска и извлечения второго или последнего заполнения текстового блока
- 13. автоматического заполнения форм в Express.js
- 14. Как использовать urllib для заполнения форм и сбора данных?
- 15. Chrome Automation с использованием расширения; нажатие кнопок и форм заполнения
- 16. Таблица заполнения таблицы поиска
- 17. Фурье и дескрипторы Фурье для извлечения форм функции на Java
- 18. Несколько форм поиска
- 19. Как использовать таблицу поиска для заполнения combobox
- 20. Использование таблицы поиска для заполнения матрицы
- 21. Фильтр поиска форм Oracle
- 22. Filetransfer для сервера, затем используйте параметр для заполнения форм?
- 23. Использование Selenium для заполнения форм из файла XML
- 24. Способ заполнения форм на многих сайтах - jQuery?
- 25. Использование rvest для заполнения формы поиска и загрузки вложений
- 26. Эмуляция jquery ui autocomplete для поиска и заполнения div
- 27. Оптимизация SOLR для извлечения всех результатов поиска
- 28. Как заблокировать спам-боты от заполнения форм?
- 29. поиска и извлечения данных из многомерного массива
- 30. Формы заполнения форм с данными из facebook
У вас есть хорошее решение этой проблемы? Я нашел это после запроса аналогичного (дублирующего?) Вопроса здесь http://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –
@ Дэвид - нет, извините. Не получили достаточно далеко с любым вариантом для комментариев ... – hatmatrix