Выберите имя класса в HTML Парсер, содержащий дополнительные слова - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь почистить веб-страницу. Я хочу получить отзывы. Но отзывы делятся на три категории, некоторые положительные, некоторые нейтральные, а некоторые отрицательные. Я использую html парсер и получил доступ ко многим тегам. Но для класса, который может быть в трех категориях, как я могу получить их:

<div class="review positive" title="" style="background-color: #00B551;">9.3</div>
<div class="review negative" title="" style="background-color: #FF0000;">4.8</div>
<div class="review neutral" title="" style="background-color: #FFFF00;">6</div>

У меня есть контейнер python для каждого элемента, содержащего каждый элемент:

# finds each product from the store page
containers = page_soup.findAll("div", {"class": "item-container"})`

for container in containers:
    title = container.findAll(a).text #This gives me titles
    ##Similarly I need the reviews of each of them here
    review = container.findAll("div", {"class": "review "}))#along with review there is positive, neutral and negative word also according to the type of review

1 Ответ

0 голосов
/ 01 мая 2020

используя регулярное выражение, вы можете получить классы, которые содержат подстроку "review".

import re

for container in containers:
    title = container.findAll(a).text #This gives me titles

    review = container.findAll("div", {"class": re.compile(r'review')})

См. Разницу:

html = '''<div class="review positive" title="" style="background-color: #00B551;">9.3</div>
<div class="review negative" title="" style="background-color: #FF0000;">4.8</div>
<div class="review neutral" title="" style="background-color: #FFFF00;">6</div>'''

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(html, 'html.parser')
review = soup.find_all('div', {'class':'review '})
print ('No regex: ',review)

print('\n')

review = soup.findAll("div", {"class": re.compile(r'review')})
print ('Regex: ',review)

Выход:

No regex:  []


Regex:  [<div class="review positive" style="background-color: #00B551;" title="">9.3</div>, <div class="review negative" style="background-color: #FF0000;" title="">4.8</div>, <div class="review neutral" style="background-color: #FFFF00;" title="">6</div>]
...