очистить тег с несколькими атрибутами - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь очистить тег, который имеет 3 атрибута.Я использовал этот код, но в результате ничего не получил.Я знаю, что этот тег существует в источнике HTML.

r = requests.get('https://www.immobiliare.it/69866648-Vendita-Quadrilocale-via-Mario-Ridolfi-32-Roma.html')  
soup = BeautifulSoup(r.text, 'html')
result=soup.find('div', attrs={ 'class':'col-xs-12 description-text text expanded', 'aria-expanded':'true', 'role':'contentinfo'})    

Я ошибаюсь где-то в синтаксисе?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

отсутствует - в text expanded, и поскольку вы используете .find(), который выбирает первый элемент, вы можете просто:

result = soup.find('div', attrs={'role':'contentinfo'})
# or
result = soup.select_one('div[role="contentinfo"]') 
0 голосов
/ 29 ноября 2018

На самом деле вы правы, но вы уже запустили JavaScript.Помните, что если вы хотите что-то сканировать, вам следует отключить JavaScript.Потому что он может переписать класс вашего тега, данные и т. Д.

result = soup.find('div',
             attrs={ 'class':'col-xs-12 description-text text-compressed',
                     'aria-expanded':"false",
                      'role':'contentinfo'})
0 голосов
/ 28 ноября 2018

Попробуйте:

# create a function to look for attrs and attr values
def foo(tag):
  return tag.has_attr('aria-expanded') and tag.has_attr('role') and tag['aria-expanded']=='true' and tag['role']=='contentinfo'

# first do a css select on classes
divs = soup.select('div.col-xs-12.description-text.text.expanded')

# then take out any that don't have the attrs/vals we need
divs = [ div for div in divs if foo(div)]

Это не очень элегантно, но я никогда не придумал лучшего способа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...