首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python从html中刮取输入值

python从html中刮取输入值
EN

Stack Overflow用户
提问于 2021-03-08 17:08:14
回答 2查看 72关注 0票数 0

嘿,我需要刮一个html来获取特定的运费,这里是HTML:

代码语言:javascript
运行
复制
<ul class="methods" id="shipping-quotes" data-url="/en/webshipper/setshippingquote" data-shipping-fee="£ 12">
                                                                <li class="method-option method-option--shipping">
            <div class="method-option__header">
                <input
                    id="shippingrate-8"
                    name="shippingrate"
                    type="radio"
                    value="8"
                    class="method-option__input shipping-rate"
                    
                />
                <label for="shippingrate-8" class="method-option__label">
                    <span class="method-option__name">UPS Standard UK - Home Delivery (2-4 business days)</span>
                    <span class="method-option__fee">9 GBP</span>
                </label>
            </div>
                        </li>
                                                                <li class="method-option method-option--shipping">
            <div class="method-option__header">
                <input
                    id="shippingrate-9"
                    name="shippingrate"
                    type="radio"
                    value="9"
                    class="method-option__input shipping-rate"
                    
                />
                <label for="shippingrate-9" class="method-option__label">
                    <span class="method-option__name">UPS Standard UK - Pick-up Point (2-4 business days)</span>
                    <span class="method-option__fee">6 GBP</span>
                </label>
            </div>
                        </li>
                                                                <li class="method-option method-option--shipping">
            <div class="method-option__header">
                <input
                    id="shippingrate-15"
                    name="shippingrate"
                    type="radio"
                    value="15"
                    class="method-option__input shipping-rate"
                    
                />
                <label for="shippingrate-15" class="method-option__label">
                    <span class="method-option__name">UPS Express UK - Home Delivery (2-4 business days)</span>
                    <span class="method-option__fee">15 GBP</span>
                </label>
            </div>
                        </li>
                                                                <li class="method-option method-option--shipping">
            <div class="method-option__header">
                <input
                    id="shippingrate-29"
                    name="shippingrate"
                    type="radio"
                    value="29"
                    class="method-option__input shipping-rate"
                    checked
                />
                <label for="shippingrate-29" class="method-option__label">
                    <span class="method-option__name">UPS Express UK - Pick-up Point (1-3 business days)</span>
                    <span class="method-option__fee">12 GBP</span>
                </label>
            </div>
                                
<div class="drop-points" id="drop-points">
    <p class="drop-point drop-point--no-result">
        No pickup points found near your chosen location
    </p>
</div>
                        </li>
        </ul>

具体来说,家庭传递选项,所以在下面的HTML中,我需要得到value= 9的值,所以我想得到9的值,如何使用bs4获得家庭传递选项的具体值?

如果我不清楚,我指的是这里面的价值选择。

代码语言:javascript
运行
复制
<input
                    id="shippingrate-9"
                    name="shippingrate"
                    type="radio"
                    value="9"
                    class="method-option__input shipping-rate"

                />

为家庭送货2-4天的选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-08 17:21:45

如果您想获取传递方法的输入值(假设是UPS Standard UK - Pick-up Point (2-4 business days) ),您可以首先找到所有的div,然后使用该方法选择一个。所以像这样的东西就能完成任务:

代码语言:javascript
运行
复制
data = soup.find('ul', attrs={'id': 'shipping-quotes'}).find_all('div', class_='method-option__header')

values = [each.input['value'] for each in data if each.find('span', class_='method-option__name').text == 'UPS Standard UK - Pick-up Point (2-4 business days)']

values将是:

代码语言:javascript
运行
复制
['9']
票数 1
EN

Stack Overflow用户

发布于 2021-03-08 20:24:24

你根本没有表现出任何努力,但既然我需要休息.

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup

data = '''\
<ul class="methods" id="shipping-quotes" data-url="/en/webshipper/setshippingquote" data-shipping-fee="£ 12">
  <li class="method-option method-option--shipping">
    <div class="method-option__header">
    <input id="shippingrate-8" name="shippingrate" type="radio" value="8" class="method-option__input shipping-rate" /> 
    <label for="shippingrate-8" class="method-option__label">
    <span class="method-option__name">UPS Standard UK - Home Delivery (2-4 business days)</span> 
    <span class="method-option__fee">9 GBP</span></label></div>
  </li>
  <li class="method-option method-option--shipping">
    <div class="method-option__header">
    <input id="shippingrate-9" name="shippingrate" type="radio" value="9" class="method-option__input shipping-rate" /> 
    <label for="shippingrate-9" class="method-option__label">
    <span class="method-option__name">UPS Standard UK - Pick-up Point (2-4 business days)</span> 
    <span class="method-option__fee">6 GBP</span></label></div>
  </li>
  <li class="method-option method-option--shipping">
    <div class="method-option__header">
    <input id="shippingrate-15" name="shippingrate" type="radio" value="15" class="method-option__input shipping-rate" /> 
    <label for="shippingrate-15" class="method-option__label">
    <span class="method-option__name">UPS Express UK - Home Delivery (2-4 business days)</span> 
    <span class="method-option__fee">15 GBP</span></label></div>
  </li>
  <li class="method-option method-option--shipping">
    <div class="method-option__header">
    <input id="shippingrate-29" name="shippingrate" type="radio" value="29" class="method-option__input shipping-rate"
    checked="checked" /> 
    <label for="shippingrate-29" class="method-option__label">
    <span class="method-option__name">UPS Express UK - Pick-up Point (1-3 business days)</span> 
    <span class="method-option__fee">12 GBP</span></label></div>
    <div class="drop-points" id="drop-points">
      <p class="drop-point drop-point--no-result">No pickup points found near your chosen location</p>
    </div>
  </li>
</ul>
'''

soup = BeautifulSoup(data, 'html.parser')
for d in soup.select('div.method-option__header'):
    rate = d.find('input', {'name': 'shippingrate'}).attrs['value']
    name = d.find('span', {'class': 'method-option__name'}).text
    fee = d.find('span', {'class': 'method-option__fee'}).text
    print(f"{rate}\t{name}\t{fee}")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66534119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档