如何使用urllib填写表单并收集数据?

时间:2013-09-20 04:05:41

标签: python urllib2 urllib

我来自科学计算和数字运算的世界。

我正在尝试与互联网进行交互以编译数据,所以我没有必要。其中一项任务是在Marriott.com上自动填写搜索内容,以便我可以看到最优惠的价格。

我尝试过像

这样简单的事情
import urllib
import urllib2

url = "http://marriott.com"


values  = {'Location':'New York'}
data = urllib.urlencode(values)

website = urllib2.Request(url, data)
response = urllib2.urlopen(website)
stuff = response.read()
f = open('test.html','w')
f.write(stuff)

我的问题如下:

  1. 您如何知道网站如何收到信息? 我怎么知道一个简单的“帖子”会起作用?
  2. 如果这很简单,我怎么知道词典的名称应该是“值?”
  3. 如何检查它是否正常工作?最后的写行是我试图看看我的输入是否正常工作但这是不够的。

3 个答案:

答案 0 :(得分:1)

您需要阅读并分析相关方的HTML代码。每个浏览器都有适当的工具来反省网站的DOM,分析网络流量和请求。

通常,您希望使用 mechanize 模块执行与网站的自动化互动。鉴于这种情况在每种情况下均有效,因此无法保证。如今许多网站都使用AJAX或更复杂的客户端编程,这使得很难使用Python“模仿”人类用户。

除此之外:mariott.com网站不包含输入字段“位置”...所以你猜测URL参数并分析了它们的形式和功能?

答案 1 :(得分:1)

  1. 我要检查的是使用Web调试代理来查看您发送的请求 首先使用浏览器发送实际请求,并将该请求与脚本发送的请求进行比较。尝试使两个请求匹配

    我使用的是Charles Proxy

    另一种方法是查看您保存的html文件(在本例中为test.html)并在浏览器中查看并将其与实际请求响应进行比较

  2. 要查找字典中应包含的内容,请查看页面的页面来源,并找出您要填写的表单的名称。在您的情况下,"location"实际上应该是"destinationAddress.destination"

    这是一张图片: Name

    因此,请查看HTML代码以获取表单的名称,这应该是字典中的内容。我知道Google Chrome和Mozilla Firefox都有工具来查看html的结构(在我使用Google Chrome中的inspect元素的图片中)

  3. 有关urllib2的更多信息,请阅读here

    我真的希望这会有所帮助:)

答案 2 :(得分:1)

您可能还要查看splinter,其中urllib可能没用(JS,AJAX等) 要找出表单参数firebug可能有用。