我有一个包含一个或多个表单的网页。我想做的是:
我已经超过了第1点,我正在使用requests.get和Beautifulsoup来识别网页中的表单。 我的问题是,如何在不提交表单的情况下获取表单网址?
示例:我将在https://stackoverflow.com/
上搜索“test”网址如下所示:https://stackoverflow.com/search?q=test
我有兴趣获得这个部分: / search?q ,因为在这些情况下其他网站的网址更复杂,我想建立一个不依赖网站的刮刀。
我尝试的完整代码:
from bs4 import BeautifulSoup
import urllib.request
import requests
import mechanicalsoup
#### What?
search_words=['search1','search2']
website='http://www.website.com/'
####
s=requests.Session()
r=s.get(website)
soup_main = BeautifulSoup(r.content,'lxml')
form=soup_main.find('form')
print(form)
param={'searchword':search_words[0]}
method = str(form.get("method"))
print(method)
action =form.get("action")
url = urllib.parse.urljoin(website, action)
print(action)
request1=requests.Request(method,url,params=param)
答案 0 :(得分:0)
以下是这样做的一个工作示例:
>>> import mechanicalsoup
>>> browser = mechanicalsoup.StatefulBrowser()
>>> browser.open('https://stackoverflow.com/')
<Response [200]>
>>> form = browser.select_form("form.searchbar") # Get a form with class 'searchbar'
>>> action = form.form.attrs['action'] # Get the action="" field
>>> browser.absolute_url(action) # Make the URL absolute
'https://stackoverflow.com/search'
请注意,q=
不是提交网址的一部分,它实际上是提供给网址的参数的一部分。
根据您对此网址的处理方式,您可能还想让MechanicalSoup为您提交表单:
>>> browser.select_form("form.searchbar")
<mechanicalsoup.form.Form object at 0x7fb5ae5c3eb8>
>>> browser["q"] = 'How to use MechanicalSoup?'
>>> browser.submit_selected()
<Response [200]>
>>> browser.get_url()
'https://stackoverflow.com/search?q=How+to+use+MechanicalSoup%3F'
您可以随时使用以下方式检查浏览器的状态:
>>> browser.launch_browser()