Я пытаюсь создать фрейм данных, состоящий из обзоров 20 банков, и в следующем коде я пытаюсь получить значение рейтинга 20 клиентов, но мне это сложно, поскольку я новичок в BeautifulSoup и Webscraping.
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = 'https://www.bankbazaar.com/reviews.html'
page = requests.get(url)
print(page.text)
soup = BeautifulSoup(page.text,'html.parser')
Rating = []
rat_elem = soup.find_all('span')
for rate in rat_elem:
Rating.append(rate.find_all('div').get('value'))
print(Rating)






Я предпочитаю использовать селекторы CSS, поэтому вы должны иметь возможность настроить таргетинг на все промежутки, настроив таргетинг на те, у которых атрибут itemprop установлен на ratingvalue.
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = 'https://www.bankbazaar.com/reviews.html'
page = requests.get(url)
print(page.text)
soup = BeautifulSoup(page.text,'html.parser')
Rating = []
for rate in soup.select('span[itemprop=ratingvalue]'):
Rating.append(rate.get_text())
print(Rating)
Соответствующий вывод
['4.0', '5.0', '5.0', '5.0', '4.0', '4.0', '5.0', '5.0', '5.0', '5.0', '4.0', '5.0', '5.0', '5.0', '5.0', '4.0', '4.5', '4.0', '4.0', '4.0']
Обновлено: добавить соответствующий вывод
Я думаю, это потому, что так долго select был таким ограниченным. Если вы новичок в bs4, вы найдете еще сотни примеров find/find_all.
Ах... Наверное, я новичок в python, но не так уж новичок в CSS, поэтому последние изменения приносят мне пользу. Мне кажется, что Find кажется более дорогим/медленным методом.
Да, мне кажется, если вы парсите много HTML, вы знаете HTML и CSS. И если вы знаете CSS, зачем вам использовать более неуклюжий find, если только вы не пользуетесь функциями, которые вы не можете получить с помощью select, такими как регулярное выражение и т. д. Но старые привычки с трудом умирают, если вы использовали bs4, когда find был лучший вариант.
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = 'https://www.bankbazaar.com/reviews.html'
page = requests.get(url)
print(page.text)
soup = BeautifulSoup(page.text,'html.parser')
# Find all the span elements where the "itemprop" attribute is "ratingvalue".
Rating = [item.text for item in soup.find_all('span', attrs = {"itemprop":"ratingvalue"})]
print(Rating)
# The output
# ['4.0', '5.0', '5.0', '5.0', '4.0', '4.0', '5.0', '5.0', '5.0', '5.0', '4.0', '5.0', '5.0', '5.0', '5.0', '4.0', '4.5', '4.0', '4.0', '4.0']
Аргументы ключевого слова BeautifulSoup
можете ли вы сказать мне, почему вы выбрали «itemprop:rating value»
«ratingvalue» — это оценка, которую поставил пользователь, а «bestrating» — это максимальная оценка, которую может дать пользователь. "ratingvalue" кажется более подходящим выбором. (Не уверен, что это то, о чем вы спрашиваете.)
Ну, я просматривал html-код и не мог его найти.
Я использовал «инструменты разработчика» в Chrome для навигации по элементам. Это Ctrl-Shift-I или просто щелкните правой кнопкой мыши элемент на странице, затем нажмите «проверить». Это приведет вас к элементу в исходном коде веб-страницы... В Firefox щелкните правой кнопкой мыши «проверить элемент», ярлык остается прежним (как хром).
В Firefox щелкните правой кнопкой мыши «проверить элемент», ярлык остается прежним (как в хроме), он называется «инспектор» вместо «инструменты разработчика».
Согласованный. Не уверен, почему find кажется таким популярным.