1

私は http が初めてで、助けが必要です。クレイグリストの検索フォームに入力して、フォームに手動で入力した場合に通常表示されるページへのリンクを取得しようとしています。ソースを表示すると、次のフォームが見つかりました。

<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>

そこで、フォームに記入するために次のコードを書きました。

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

たとえば、入力するフォームを指定するにはどうすればよいですか? フォームの「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>

しかし、私はカテゴリを選択したと確信しています。私は何をすべきか?ありがとう!

4

4 に答える 4

0

URL で HTTP GET パラメータを送信し ( のようにリクエスト本文のエンコードされた部分としてではなくPOST)、Python を次のように変更すると、次のようになります。

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

また、情報を解析して抽出するために、この入力をBeautiful Soupに渡すと、生活がずっと楽になります。

于 2013-07-16T18:20:12.703 に答える
0

一般に、 HttpFoxなどのブラウザ プラグインを使用して、通常のブラウザを使用したときに何が起こるかを正確に確認し、これをプログラムで再現することをお勧めします。HttpFox を使用すると、ブラウザから送信された HTTP GET 要求の構造を正確に確認できます。

areaID次のすべてのクエリ パラメータsubAreaIDを指定する必要があるようqueryですcatAbb:

Web アプリケーションのエラー メッセージは、正確でないかバグがある可能性があります。

于 2013-07-16T17:55:12.563 に答える
0

次のいずれかで試してください

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

于 2013-07-16T17:55:27.007 に答える