Pergunta

Eu estou escrevendo um script raspador de tela em python com o módulo 'mecanizar', e eu gostaria de usar o método mechanize.click_link () em um link que tem javascript: __ doPostBack em href. Eu acredito que a página que eu estou tentando analisar está usando AJAX.

Nota: mech é o mechanize.Browser ()

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False

Eu gostaria de recuperar o código fonte da página depois de clicar no link.

Foi útil?

Solução

Não uso mecanizar, mas eu fazer um monte de web raspagem-me com python.

Quando eu me deparo com uma função javascript como __doPostBack, eu faço o seguinte:
Eu acessar o web site no Firefox, e usar a extensão HttpFox para ver os parâmetros do POST solicitar o navegador enviada para o servidor web ao clicar no link relevante.
Eu, então, construir o mesmo pedido em python usando urllib.parse.urlencode para construir as strings de consulta e POST dados que eu preciso.
Às vezes, as utilizações do website biscoitos, bem, então eu só uso de python http.cookiejar.

Eu tenho usado essa técnica com sucesso várias vezes.

Outras dicas

Eu não acho suportes mechanize Javascript; para páginas raspar que dependem intrinsecamente na execução Javascript para sua funcionalidade, você pode precisar usar uma ferramenta diferente, como Selenium RC .

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top