Pergunta

Eu queria saber se é possível "automatizar" a tarefa de procurar formas e partidas extrair a partir dos resultados de digitar entradas. Por exemplo, eu tenho uma lista de artigos de jornal para o qual eu gostaria de obter (Digital Object Identifier) ??do DOI; manualmente por isso eu iria para os artigos de jornal de página (por exemplo, http://pubs.acs.org/ procurar procurar / avançado), digite o autores / title / volume (etc.) e, em seguida, encontrar o artigo fora de sua lista de resultados retornados, e escolher o DOI e colar isso em minha lista de referência. Eu uso R e Python para análise de dados regularmente (I foi inspirado por uma mensagem em RCurl), mas não sei muito sobre protocolos web ... é tal coisa uma possível (por exemplo, usando algo como BeautifulSoup do Python?). Há alguma boas referências para fazer qualquer coisa remotamente semelhante a esta tarefa? Eu só estou tão interessado em aprender sobre raspagem web e ferramentas para web scraping, em geral, tanto quanto recebendo essa tarefa em particular feito ... Obrigado pelo seu tempo!

Foi útil?

Solução

Beautiful Soup é excelente para análise webpages- que é metade do que você quer fazer. Python, Perl e Ruby todos têm uma versão do Mecanizar, e essa é a outra metade:

http://wwwsearch.sourceforge.net/mechanize/

Mecanizar de permitir que você controle um navegador:

# 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()

Com Mecanizar e Beautiful Soup você tem um grande começo. Uma ferramenta adicional que eu considero é Firebug, como usado neste guia raspagem rápida rubi:

http: //www.igvita .com / 2007/02/04 / ruby-screen-scraper-in-60-segundos /

Firebug pode acelerar a sua construção de XPaths para analisar documentos, poupando-lhe algum tempo sério.

Boa sorte!

Outras dicas

código Python:. De formulários de pesquisa

# import 
from selenium import webdriver

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0

from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# go to the google home page
driver.get("http://www.google.com")

# the page is ajaxy so the title is originally this:
print driver.title

# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_name("q")

# type in the search
inputElement.send_keys("cheese!")

# submit the form (although google automatically searches now without submitting)
inputElement.submit()

try:
    # we have to wait for the page to refresh, the last thing that seems to be updated is the title
    WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))

    # You should see "cheese! - Google Search"
    print driver.title

finally:
    driver.quit()

Fonte: https://www.seleniumhq.org/docs/03_webdriver.jsp

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 

(Adaptado de Joe Albahri "C #, em poucas palavras")

Existem muitas ferramentas para web scraping. Há uma boa firefox plugin chamado iMacros. Ele funciona muito bem e precisa de nenhum conhecimento de programação em tudo. A versão gratuita pode ser baixado aqui: https://addons.mozilla.org/en-US/ firefox / addon / iMacros para-firefox / A melhor coisa sobre iMacros, é que ele pode começar em questão de minutos, e também pode ser iniciado a partir da linha de comando bash, e também pode ser chamado de dentro scripts bash.

Um passo mais avançado seria selênio webdrive. A razão que eu escolhi selênio é que ele é documentado em um grande iniciantes forma adequando. lendo apenas o seguinte página:

iria levá-lo upand funcionando em nenhum momento. suportes de selênio Java, Python, PHP, c por isso, se você está familiarizado com qualquer um desses idiomas, você estaria familiarizado com todos os comandos necessários. Eu prefiro variação webdrive de selênio, uma vez que abre um navegador, de modo que você pode verificar os campos e saídas. Depois de configurar o script usando webdrive, você pode facilmente migrar o script para IDE, correndo assim, sem cabeça.

Para instalar o selênio pode fazer digitando o comando

sudo easy_install selenium

Isto irá cuidar das dependências e tudo o necessário para você.

A fim de executar o script interativamente, basta abrir um terminal e digite

python

Você vai ver o python prompt >>> e você pode digitar os comandos.

Aqui está um exemplo de código que você pode colar no terminal, ele procure no Google para a palavra queijos

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();
    }}

Espero que isso pode dar-lhe uma vantagem.

Cheers:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top