Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择使用python请求_Python_Beautifulsoup_Python Requests - Fatal编程技术网

选择使用python请求

选择使用python请求,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,使用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 valu

使用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>

5.
10
15
20
25
30
50
100
全部的

我需要做的是将select=“selected”移动到最后一个选项All。

我尝试的是:

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)
选择对象中的项目的
:
如果str(项目)=“20”:
项目。将_替换为('20')
如果str(项目)=“全部”:
项目。将_替换为('All')
request=requests.post(url,params=select_对象)
soup=BeautifulSoup(request.content)
上述方法不起作用,因为我得到的不是,而是<

我还尝试:

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)
选择对象中的项目的
:
如果str(项目)=“20”:
新标签2=BeautifulSoup('20')
new_tag2=new_tag2.html.body.contents[0]
项目。将_替换为(新_标签2)
如果str(项目)=“全部”:
newtag2=BeautifulSoup(“全部”)
newtag2=newtag2.html.body.contents[0]
项目。将_替换为(newtag2)value=“0”>All')
request=requests.post(url,params=select_对象)
soup=BeautifulSoup(request.content)
这是可行的,如果我再次搜索选择项,它是正确的,但页面没有变化,我只得到前20个结果,而不是全部结果。 有什么想法吗? 我认为我的发帖不对,或者可能有一种更简单的方法。
我不认为params=select\u object是正确的,但是…

replace\u with
将转义字符串,但它还接收一个标记,以便您可以使用:

new_tag = BeautifulSoup('<option value="20">20</option>').option
item.replace_with(new_tag)

replace_with
将转义字符串,但它也会接收一个标记,以便您可以使用:

new_tag = BeautifulSoup('<option value="20">20</option>').option
item.replace_with(new_tag)

对于“post”,应使用“数据”而不是“参数”。使用'params'表示'get'。

对于'post',您应该使用'data'而不是'params'。使用'params'表示'get'。

params=select\u object
绝对不对
params
应该是dict或string。
params=select\u object
绝对不对
params
应该是dict或string。它看起来不错,但我如何重新提交表单?您的答案就在现场,它以非常简单的方式更改了我需要的内容,但我仍然不知道如何使用修改后的select对象发送请求。我已经更新了答案,但基本上是伪代码,但是只要url和表单是正确的,就应该得到预期的结果。如果你给出链接和预期结果,我想问题会很清楚。看起来不错,但我如何重新提交表格?你的答案就在现场,它以一种非常简单的方式更改了我所需要的内容,但我仍然不知道如何使用修改后的select对象发送请求。我已经更新了答案,但基本上是伪代码,但只要url和表单正确,就应该得到预期的结果。我认为如果你给出链接和你的预期结果,这个问题会很清楚。
# 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)