【发布时间】:2014-02-11 02:20:35
【问题描述】:
我正在使用请求来访问此webpage,然后使用 Beautiful Soup 解析和检查 HTML。
此页面允许用户指定应返回结果的过去天数。这是通过页面上的表单完成的:
当我选择 365 天在浏览器中提交请求并检查响应时,我发现此表单数据是随请求一起发送的:
值得注意的是表格数据“dnf_class_values[procurement_notice][_posted_date]: 365”,因为这是与我选择的 365 天相对应的唯一元素。
当此请求在浏览器中返回时,我得到 n 个结果,其中 n 是可能的最大数量,因为这是可能的最大时间段。 n 在标记中显示为 <span class="lst-cnt">。
我似乎无法通过请求复制该表单数据的发送。这是我的代码的相关部分:
import requests
from bs4 import BeautifulSoup as bs
formData = {'dnf_class_values[procurement_notice][_posted_date]':'365'}
r = requests.post("https://www.fbo.gov/index?s=opportunity&mode=list&tab=list&tabmode=list&pp=20&pageID=1", data = formData)
s = bs(r.content)
s.find('span',{'class':'lst-cnt'})
这将返回与使用默认天数值提交表单时相同数量的结果。
我尝试过对data 中的密钥进行 URL 编码,以及使用requests.get,并指定params 而不是data。此外,我尝试将表单数据字段附加为查询字符串参数:
url...?s=opportunity&mode=list&tab=list&tabmode=list&pp=20&pageID=1&dnf_class_values%5Bprocurement_notice%5D%5B_posted_date%5D=365
该请求的适当语法是什么?
【问题讨论】:
-
如果你想实际做这种浏览器交互,
requests不是你想用的工具。查看CasperJS或Selenium
标签: python beautifulsoup httprequest python-requests