1

我是 http 新手,需要帮助。我正在尝试在craigslist中填写搜索表格,以便获得指向如果我手动填写表格通常会获得的页面的链接。通过查看源代码,我发现了这个表格:

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

我不确定所有的事情,例如我如何指定我要填写哪个表格?我假设它是通过在表单的“操作”中指定“\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

你为什么不使用请求(http://docs.python-requests.org/en/latest/):

import requests    
response = requests.get("http://auburn.craigslist.org/search/", params={"query": "english tutor", "catAbb": "sss"})
response.content
于 2013-07-16T17:54:43.193 回答
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/", 参数)
    conn.request("GET", "/search/", 参数)

于 2013-07-16T17:55:27.007 回答
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 回答