2013-07-16 2 views
1

저는 http를 처음 사용하기 때문에 도움이 필요합니다. craigslist에서 검색 양식을 작성하려고하므로 양식을 수동으로 채운 경우 일반적으로 얻은 페이지 링크를 얻을 수 있습니다.html get request "카테고리를 선택하지 않았습니다."

import urllib,httplib 
conn = httplib.HTTPConnection("auburn.craigslist.org") 
params = urllib.urlencode({'query': 'english tutor', 'catAbb': 'bbb'}) 
conn.request("GET","/search",params) 
response = conn.getresponse() 
print response.read() 

잘 모르겠어요 대한 모든 것을, 예를 들면 :

<form id="search" action="/search/" method="GET"> 
      <div>search craigslist</div> 
      <input type="hidden" name="areaID" value="372"> 
      <input type="hidden" name="subAreaID" value=""> 
      <input id="query" name="query" autocorrect="off" autocapitalize="off"><br> 
      <select id="catAbb" name="catAbb"> 
       <option value="ccc">community</option> 
       <option value="eee">events</option> 
       <option value="ggg">gigs</option> 
       <option value="hhh">housing</option> 
       <option value="jjj">jobs</option> 
       <option value="ppp">personals</option> 
       <option value="res">resumes</option> 
       <option value="sss" selected="selected">for sale</option> 
       <option value="bbb">services</option> 
      </select> 


<input id="go" type="submit" value="&gt;"> 
    </form> 

그래서 내가 양식을 작성하기 위해 코드를 작성 : 소스를보고, 나는이 양식을 발견했습니다 어떤 양식을 작성하고 싶은지 어떻게 지정합니까? 나는 폼의 "action"에서 "\ search"를 지정하는 것으로 가정했지만 httplib.request의 'url'인수에 실제로 있어야합니까? 어쨌든, 대신에 내 원하는 결과 페이지에 URL을 받고, 나는이 HTML 페이지 수 :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <title>auburn craigslist search</title> 
    <blockquote> 
     <b>You did not select a category to search.</b> 
    </blockquote> 

을하지만 내가 카테고리를 선택 않았다 확신 해요. 어떻게해야합니까? 감사!

+0

POST가 아닌 GET 요청을 어떻게 예상하는지 어떻게 알 수 있습니까? – aldux

+0

"method = GET"이라고 표시되어 있습니다. 그것은 가정입니다, 맞습니까? – nodwj

+1

일반적으로 Fiddler와 같은 브라우저 플러그인을 사용하여 일반 브라우저를 사용하여 프로그래밍 방식으로 재생할 때 어떤 현상이 발생하는지 확인하는 것이 좋습니다. Fiddler를 사용하면 브라우저에서 보낸 HTTP GET 요청의 구조를 정확하게 볼 수 있습니다. –

답변

0

중 하나를 시도하십시오 HTTP GET URL에 PARAMS (그리고 POST 같은 요청 본문의 인코딩 된 부분으로),이 당신처럼 보이도록 파이썬 변경 당신이 구문 분석 및 추출 정보, Beautiful Soup이 입력을 전달하는 경우 또한 당신이 당신의 인생을 훨씬 쉽게 만들 것입니다

import urllib,httplib 

conn = httplib.HTTPConnection("auburn.craigslist.org") 
params = urllib.urlencode({'query': 'english tutor', 'catAbb': 'bbb'}) 
conn.request("GET","/search?%s" % params) 
response = conn.getresponse() 

print response.read() 

: 당신이 후에 무엇을 얻어야한다.

+0

큰 일을 한 것처럼 보입니다! html 코드 대신 결과 페이지에 대한 URL을 어떻게 얻을 수 있는지 알고 계십니까? – nodwj

+0

''http://auburn.craigslist.org "+"/ search? % s "% params'는 URL을 –

+0

으로 줄 것입니다. 그러나 이것은 http 요청이 전혀 필요 없다는 것을 의미합니다! : O – nodwj

0

는 왜 요청()를 사용하지 마십시오 : 일반적으로

import requests  
response = requests.get("http://auburn.craigslist.org/search/", params={"query": "english tutor", "catAbb": "sss"}) 
response.content 
0

을, 나는 브라우저는 일반 브라우저를 사용하는 경우 정확히 어떻게되는지 등 HttpFox 플러그인 다음 프로그램이 재현를 사용하는 것이 좋습니다 . HttpFox를 사용하면 브라우저에서 보낸 HTTP GET 요청의 구조를 정확하게 볼 수 있습니다. areaIDsubAreaID는, query는, catAbb가 (당신은 그 두 가지를 놓친) :이 쿼리 매개 변수를 모두 제공해야처럼

는 것 같습니다.

웹 응용 프로그램의 오류 메시지는 정확하지 않거나 버그가있을 수 있습니다.

+0

처음 두 개는 "숨겨져 있습니다", 정말로 제공합니까? 있을 것 같지 않습니다. – nodwj

+0

이들은 그래픽 인터페이스에서 숨겨져 있지만 요청 내에서 전송됩니다. 그것이 숨겨진 필드의 목적입니다. 예를 들어 직접 사용해보십시오. HttpFox. –

0

보내 다음

 

    conn.request("GET", "http://auburn.craigslist.org/search/", params) 
    conn.request("GET", "/search/", params) 

+0

둘 다 원래 시도와 동일한 결과를 산출합니다. – nodwj