如何使用python请求库在两个表单之间进行选择?

时间:2016-05-25 04:54:25

标签: python forms web-scraping python-requests

我正在尝试使用请求库向包含两个表单的网站提交POST请求。该网站是https://itsapps.unc.edu/dir/dirSearch/view.htm,我正在尝试访问高级搜索表单。

表单的html如下:

...
<div id="basicSearch" class="yui-hidden">
   <form onSubmit="return false;" method="post" accept-charset="UTF-8">
   ...
   </form>
</div>                                     
<div id="advancedSearch"><!-- advanced search -->
   <form onSubmit="return false;" method="post" accept-charset="UTF-8">
       <table class="section">
          <tr>
            <td colspan="2"><label for="affiliation">Search
...

我该怎么做呢?有没有办法指定表单ID /名称?现在我只有:

url = 'https://itsapps.unc.edu/dir/dirSearch/search'
form_data = {'affiliation':'students',
         'firstname':'Anthony'}

response = requests.post(url, data=form_data)
print response.text

因为高级搜索选项具有隶属关系作为下拉列表,我假设在表单参数中将它自动选择与参数匹配的表单,但是当我从form_data中删除affiliation参数时输出不会改变。

注意,在检查开发人员工具网络信息以进行基本搜索时看到的表单数据是:

searchString=Anthony

和高级搜索是:

affiliation=student&firstname=Anthony&lastname=&email=&pid=&onyen=

2 个答案:

答案 0 :(得分:1)

你只需要张贴到https://itsapps.unc.edu/dir/dirSearch/search,你就会得到一些json:

In [1]: data = {
   ...:         "firstname": "Laurel",
   ...:         "lastname": "Foote-Hudson"}

In [2]: 

In [2]: r = requests.post("https://itsapps.unc.edu/dir/dirSearch/search", data=data)

In [3]: print(r.json())
[{u'uncReverseDisplayName': u'Foote-Hudson, Laurel', u'telephoneNumber': u'xxxxxxxxxxxxxxx', u'eduPersonNickname': u'Laurel', u'uncPreferredSurname': u'Foote-Hudson', u'sn': u'Foote-Hudson', u'spid': u'240a0d7c1534aa3a', u'mail': u'xxxxxxxxxxx', u'givenName': u'Laurel'}

您可以使用chrome或firefox查看帖子表单字段:

enter image description here

您不提供的字段为空。

答案 1 :(得分:0)

您可以使用开发人员工具/ firebug /其他浏览器扩展程序查看它。没有任何明确说明您选择的形式。唯一的区别是哪些字段被发送回服务器。

如果是高级搜索,请记住所有字段都已发送 - 即使它们已空。