Как найти скрытое значение ввода с идентификатором и именем - Python, bs4 - PullRequest
0 голосов
/ 26 декабря 2018

Доброе утро, дорогая ТАК сообщество.В последнее время у меня возникла небольшая проблема при попытке разобрать HTML.Я всегда использую модуль bs4, и до сих пор это было нормально.При извлечении я в основном нуждался в скрытых входах и мог легко найти значение, если бы искал их по имени.Но теперь я нашел страницу, на которой вход имеет также идентификатор, например:

<input type="hidden" value="985207" name="order[ship_address_attributes] 
[id]" id="order_ship_address_attributes_id">

Я хочу найти значение, если остальное известно.

Я попробовал его простооставив часть идентификатора в стороне и выполнив поиск только по названию, как я привык, но это не сработало, и я не нашел значение.

мой код:

soup=bs(r.text, 'lxml')
vle=soup.find('input',{'name':'ship_address_attributes'})['value']

Я надеюсь найти способ получить значение, аналогично тому, как я пытался.Есть ли способ добавить только идентификатор, как имя?Я был бы очень рад любой помощи.Большое спасибо и желаю всему сообществу счастливых праздников.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

почему бы не выбрать его с помощью id?

vle = soup.find('input',{'id':'order_ship_address_attributes_id'})['value']

, если значение name не имеет пробела или новой строки, выберите его с помощью

vle = soup.find('input', {'name':'order[ship_address_attributes][id]'})['value']

И это выберет input с type=hidden и имеет атрибуты name также id

hiddenInputs = soup.select('input[type=hidden]')
for input in hiddenInputs:
    if input.get('name') and input.get('id'):
        print(input['value'])
0 голосов
/ 26 декабря 2018

Вы можете использовать regex вместе с BeautifulSoup, чтобы найти правильный тег.

Например:

import re
from bs4 import BeautifulSoup as bs

a = '''<input type="hidden" value="985207" name="order[ship_address_attributes] 
[id]" id="order_ship_address_attributes_id">'''

# Or:
# soup = bs(a, 'lxml')
soup = bs(a, 'html.parser')
data = soup.find('input', {'name': re.compile(r'order\[\w+\]\s+\[\w+\]')})
print(data['value'])  # 985207

Или, если вы хотите найти тег с точным regex матч, вы можете сделать:

data = soup.find('input', {'name': re.compile(r'order\[ship_address_attributes\]\s+\[id\]')})
print(data['value'])  # 985207
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...