2011-05-04 3 views
0

특정 페이지에 액세스하고 양식 데이터를 입력 한 다음 제출시 리디렉션되는 페이지를 인쇄하는 간단한 웹 봇을 만들려고합니다. 그러나 내 resp.read() 호출은 초기 양식 제출 페이지를 계속 인쇄합니다. 나는 HTML 구문 분석에 대한 LXML을 사용하고Python Web Bot (urllib)

<html> 
<body> 
<P>Welcome <BR><P>Please answer the question <BR><P>98270+88340= ? 
<form name="loginform" method="post" action="vote.php"> 
    <input name="sum" type="text" id="sum" /> 
    <input type="submit" name="Submit" value="POST Answer"> 
    </form></body> 

import urllib 
import urllib2 
import lxml.html as lh 

#parse the operands 
url='hidden' 
parr=lh.parse(url).xpath('//p/text()') 
elem=parr[2] 
op1=int(elem[0:5]) 
op2=int(elem[6:11]) 
sum=op1+op2 
print sum 
sum=str(sum) 

#request values                 
values = { 
"sum": sum, 
"Submit": "POST Answer" 
} 
#encode for transmssion               
data = urllib.urlencode(values) 
request = urllib2.Request(url, data) 
resp=urllib2.urlopen(request) 
#receive response                
print resp.read() 
resp.close() 

:

다음은 페이지와 내 코드입니다. 올바른 합계를 반환합니다.

+3

[mechanize module] (http://wwwsearch.sourceforge.net/mechanize/)에서 훨씬 쉽게 확인할 수 있습니다. – samplebias

+0

제안 해 주셔서 감사합니다. 내가 기계화 작업을하고있다 – Leif

+0

당신은 이것을 취해야한다 : http://stackoverflow.com/revisions/801745a8-0bc0-4c9b-be05-595283e5be39/view-source 그리고 그것을 당신 자신의 질문에 대한 실제 답변으로 만든다 - 편집하지 마라. 귀하의 질문에, 그것은 다른 사람들이 볼 수있어 유용합니다! –

답변

0

해결 된 질문 ... 여기 그것을보고 싶은 사람을위한 해결책이 있습니다.

import re 
import mechanize 
import lxml.html as lh 

url='hidden' 

parr=lh.parse(url).xpath('//p/text()') 
elem=parr[2] 
op1=int(elem[0:5]) 
op2=int(elem[6:11]) 
sum=op1+op2 
print sum 
sum=str(sum) 

br=mechanize.Browser() 
br.open(url) 

br.select_form(name="loginform") 
br["sum"]=sum 
resp=br.submit() 

br.select_form(name="poll") 
br["vote"]=["7"] 
resp2=br.submit() 

print resp2.read() 

는 기본적으로 봇은, 두 개의 피연산자에 대한 페이지를 구문 분석, URL을 열어 다음 페이지에서 설문 조사에 투표를 진행하기 전에 형태로 합계를 입력.