Извлечение текста из атрибута 'value' с помощью Beautifulsoup - PullRequest
1 голос
/ 18 апреля 2019

HTML-код:

<td id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_tdBINPrice">
    <input id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice" name="ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice" 
    style="width:50px;" type="text" value="1435.97"/>                           
    <img id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_imgCustomPriceCalculator" src="/images/ChannelPriceCustom.png" style="width:16px;"/>
</td>

Я бы хотел добавить текст в атрибут «Значение» («1435,95»)

Я попытался сделать это, выполнив следующий код, но не повезло.

driver.get(someURL)
       page = driver.page_source
       soup = BeautifulSoup(page, 'lxml')
       price = soup.find('td', {'id' : re.compile('ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_tdBINPrice')})

       print(price)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Существует идентификатор, который является самым быстрым селектором.Используйте это, чтобы получить элемент, а затем взять атрибут value.Отчасти ваш сбой, так как вы смотрите на тэд, а не на входной тег

from bs4 import BeautifulSoup as bs
html = '''
<td id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_tdBINPrice">
    <input id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice" name="ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice" 
    style="width:50px;" type="text" value="1435.97"/>                           
    <img id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_imgCustomPriceCalculator" src="/images/ChannelPriceCustom.png" style="width:16px;"/>
</td>
'''
soup = bs(html, 'lxml')
soup.select_one('#ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice')['value']

Ваш (с вводом):

print(soup.find("input", {"id": "ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice"})['value'])
2 голосов
/ 18 апреля 2019

Попробуйте следующий код.

from bs4 import BeautifulSoup

html='''<td id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_tdBINPrice">
    <input id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice" name="ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice" 
    style="width:50px;" type="text" value="1435.97"/>                           
    <img id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_imgCustomPriceCalculator" src="/images/ChannelPriceCustom.png" style="width:16px;"/>
</td>'''

soup = BeautifulSoup(html, 'html.parser')

textval=soup.select_one("input[name='ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice']")
print(textval['value'])

ИЛИ

from bs4 import BeautifulSoup

html='''<td id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_tdBINPrice">
    <input id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_txtBuyItNowPrice" name="ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice" 
    style="width:50px;" type="text" value="1435.97"/>                           
    <img id="ContentPlaceHolder1_ContentPlaceHolder1_Product_eBay1_imgCustomPriceCalculator" src="/images/ChannelPriceCustom.png" style="width:16px;"/>
</td>'''

soup = BeautifulSoup(html, 'html.parser')

textval=soup.find("input" ,attrs={"name" : "ctl00$ctl00$ContentPlaceHolder1$ContentPlaceHolder1$Product_eBay1$txtBuyItNowPrice"})
print(textval['value'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...