使用BeautifulSoup和请求:
输入:
select_object=soup.find('select',{'id':'limit'})
print(select_object)
输出:
<select id="limit" name="limit" class="inputbox" size="1" onchange="this.form.submit()">
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20" selected="selected">20</option>
<option value="25">25</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="0">All</option>
我需要做的是移动选择=&#34;选择&#34;到最后一个选项,全部。
我尝试了什么:
for item in select_object:
if str(item) == '<option selected="selected" value="20">20</option>':
item.replace_with('<option value="20">20</option>')
if str(item) == '<option value="0">All</option>':
item.replace_with('<option selected="selected" value="0">All</option>')
request=requests.post(url,params=select_object)
soup=BeautifulSoup(request.content)
以上不起作用,因为而不是&lt;和&gt;我得到&amp; lt
我也尝试过:
for item in select_object:
if str(item) == '<option selected="selected" value="20">20</option>':
new_tag2=BeautifulSoup('<option value="20">20</option>')
new_tag2=new_tag2.html.body.contents[0]
item.replace_with(new_tag2)
if str(item) == '<option value="0">All</option>':
newtag2=BeautifulSoup('<option selected="selected" value="0">All</option>')
newtag2=newtag2.html.body.contents[0]
item.replace_with(newtag2) value="0">All</option>')
request=requests.post(url,params=select_object)
soup=BeautifulSoup(request.content)
这样做,如果我再次搜索选择项目它是正确的,但页面没有变化,我只获得前20个结果,而不是获得所有结果。 有任何想法吗? 我认为我没有正确发布或者可能有更简单的方法。 我不认为params = select_object是对的但是......
答案 0 :(得分:3)
replace_with
将转义字符串,但它也会收到一个标记,以便您可以使用:
new_tag = BeautifulSoup('<option value="20">20</option>').option
item.replace_with(new_tag)
如果您只想更改属性,则可以更直接地操作它:
for item in select_object:
if str(item) == '<option selected="selected" value="20">20</option>':
del item['selected']
if str(item) == '<option value="0">All</option>':
item['selected'] = 'selected'
您需要发送包含表单数据的帖子请求,您需要获取网址并准备数据。类似的东西:
# get the url
action = soup.find('form', ...).get('action')
post_url = get_post_url(host, action)
# parse the html and prepare the form
form = {'limit': '0', ...}
# send post request the form data
response = requests.post(post_url, data=form)
答案 1 :(得分:0)
对于“发布”,您应该使用“数据”而不是“参数”。将“参数”用作“获取”。