首页 > 解决方案 > python从html中抓取输入值

问题描述

嘿,我需要为特定的运费抓取一个 html,这是 HTML:

<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 获得送货上门选项的具体值?

如果我不清楚我的意思是这个中的价值选项

<input
                    id="shippingrate-9"
                    name="shippingrate"
                    type="radio"
                    value="9"
                    class="method-option__input shipping-rate"

                />

对于送货上门 2-4 天选项。

标签: pythonpython-3.xweb-scrapingbeautifulsoup

解决方案


如果您想获取 shipping method 的输入值(假设UPS Standard UK - Pick-up Point (2-4 business days)在您的情况下),您可以先找到所有divs,然后使用此方法选择一个。所以像这样的东西可以完成这项工作:

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将会:

['9']

推荐阅读