Beautifulsoup выбирает элемент на основе innerHTML с помощью Python

Я пишу скрипт Python с Beautifulsoup, чтобы удалить страницу вопросов в Stack Overflow. Я только хочу получить все вопросы титулы вместе с голоса со страницы.

Для каждого из вопросов я получаю 3 элемента div (голоса, ответы, просмотры), используя один и тот же класс. Это выглядит примерно так:

<div class="question">
    <div class="stats">
        <span class="item-number">0</span>
        <span class="item-unit">votes</span>
    </div>
    <div class="stats">
        <span class="item-number">10</span>
        <span class="item-unit">answer</span>
    </div>
    <div class="stats">
        <span class="item-number">15</span>
        <span class="item-unit">views</span>
    </div>
</div>

Мой код Python выглядит так

from tkinter import DoubleVar
from urllib import response
import requests
from bs4 import BeautifulSoup

url = "https://stackoverflow.com/questions"
response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")
questions = soup.select(".s-post-summary.js-post-summary")

for question in questions:
    print(question.select_one(".question").getText())
    # Need help select the votes
    print(question.select_one(".item-number").getText())

Поскольку голоса, ответы и просмотры имеют одни и те же классы, каков наилучший и наименее хрупкий способ подсчета голосов?

Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Введение в технологический стек Twitch
Введение в технологический стек Twitch
В этой статье мы подробно рассмотрим стек Twitch, который подразделяется на следующий набор технологий:
8 полезных HTML-тегов, которые лучше использовать вместо <div>
8 полезных HTML-тегов, которые лучше использовать вместо <div>
Когда я только начинал изучать html, я использовал div для всего, это был один из первых тегов, которые я выучил, и казалось, что он работает в любой...
HTML5: API локального хранилища (Local Storage)
HTML5: API локального хранилища (Local Storage)
LocalStorage - это простой способ хранения данных в браузере пользователя.
Доступность HTML - программирование с инклюзивной перспективой
Доступность HTML - программирование с инклюзивной перспективой
Представьте, что вы хотите поехать на пляж. Представьте, что вы упорно трудились весь год и заслужили это. Прибыв на место, вы обнаруживаете, что...
Именование классов CSS: Конвенция именования BEM
Именование классов CSS: Конвенция именования BEM
Сопровождаемость кода, сама по себе, является пульсирующим эффектом нескольких факторов. Когда часть программного обеспечения читабельна, ясна,...
0
0
29
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы можете использовать функцию find_all(), и возврат будет массивом. из-за голосов в индексе 0 вы можете получить доступ в индексе 0.

print(question.find_all(".item-number")[0].getText())
Ответ принят как подходящий

Это работает

import requests
from bs4 import BeautifulSoup

url = "https://stackoverflow.com/questions"
response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

title = [x.get_text(strip=True) for x in soup.select('[class="s-post-summary--content-title"] > a')]
print(title)
votes =  [x.get_text(strip=True) for x in soup.select('div[class="s-post-summary--stats-item s-post-summary--stats-item__emphasized"] > span:nth-child(1)')]
print(votes)

Выход:

['React Native - expo/vector-icons typescript type definition for icon name', 'React 25+5 Clock is working but fails all tests', 'Add weekly tasks, monthly tasks in google spreadsheet', 'Count number of change in values in Pandas column', "React-Select: How do I update the selected option dropdown's defaultValue on selected value onChange?", 'Block execution over a variable (TTS Use-Case), other than log statements (spooky)', "'npm install firebase' hangs in wsl. runs fine in windows", 'Kubernetes Dns service sometimes not working', 'Neo4j similarity of single node with entire graph', 'What is this error message? ORA-00932: inconsistent datatypes: expected DATE got NUMBER', 'Why getChildrenQueryBuilder of NestedTreeRepository say Too few parameters: the query defines 2 parameters but you only bound 0', 'Is is a security issue that Paypal uses dynamic certificate to verify webhook notification?', 'MessageBox to autoclose after 
a function done', 'Can someone clearly explain how this function is working?', 'Free open-sourced tools for obfuscating iOS app?', "GitHub page is not showing background image, FF console 
shows couldn't load images", 'Is possible to build a MLP model with the tidymodels framework?', 'How do I embed an interactive Tableau visual into an R Markdown script/notebook on Kaggle?', 'Dimensionality reduction methods for data including categorical variables', 'Reaching localhost api from hosted static site', 'Finding the zeros of a two term exponential function with 
python', 'optimizing synapse delta lake table not reducing the number of files', '(GAS) Email 
Spreadsheet range based on date input in the cell', 'EXCEL Formula to find and copy cell based on criteria', 'how to write function reduce_dimensionality?', 'Semi-Radial type Volume Slider in WPF C#', 'tippy.js tool tips stop working after "window.reload()"', 'is there some slice indices must be integers on FFT opencv python? because i think my coding is correct', 'NoParameterFoundException', 'How to get the two Input control elements look exactly same in terms of background and border?', 'My code is wrong because it requests more data than necessary, how can i solve it?', 'Express Session Not Saving', 'Which value should I search for when changing the date by dragging in FullCalendar?', 'Non-constant expression specified where only constant 
expressions are allowed', 'Cocoapods not updating even after latest version is installed', 'Ruby "Each with Index" starting at 1?', 'Converting images to Pytorch tensors loses label data', 'itemview in Adapter for recyclerview not getting id from xml', 'Use Margin Auto & Flex to Align Text', '(C++) URLDownloadToFile Function corrupting downloaded EXE', 'Search plugin for Woocommerce website (Free)', 'Create new folder when save image in Python Plotly', "What's the difference between avfilter_graph_parse_ptr() and avfilter_link()?", 'Inputs to toString (java) on a resultset from MySQL [duplicate]', 'Which language i learn in This time for better future? python or javaScript? [closed]', 'Hi everyone. I want to write a function in python for attached data frame. I can not figure out how can I do it', 'is there a way in R to mutate a cumulative subtraction to update the same mutated var?', 'making a simple reccommendation system in JavaScript', 'Amchart4 cursor does not match mouse position in screen with zoom', 'Bash curl command works in terminal, but not with Python os.system()']
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-2', '0', '1', '0', '0', '0']

Вы можете выбрать общий родительский элемент, который возвращает список всех вопросов, а затем использовать select_one и селектор класса css, чтобы выбрать голосование и заголовок вопроса. Оберните это в понимании словаря, чтобы соединить результаты.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get("https://stackoverflow.com/questions")
soup = bs(r.content, "lxml")
data = {
    i.select_one(".s-post-summary--content-title").text.strip(): int(
        i.select_one(".s-post-summary--stats-item-number").text
    )
    for i in soup.select(".s-post-summary")
}
print(data)

Другие вопросы по теме

Похожие вопросы

Как я могу использовать наведение на один элемент, чтобы изменить фон всей страницы в CSS, Javascript и/или HTML
Как перебрать эту таблицу html и получить данные из строк, последний столбец которых не пуст?
Простая проверка паролей JavaScript не будет зацикливаться после первой итерации
Как удалить правое поле на панели навигации?
При нажатии на изображение должно отображаться соответствующее изображение в другом div с использованием только JavaScript.
TypeError: невозможно прочитать свойства неопределенного (чтение «addEventListener»)
Текст на изображении с эффектом виньетки CSS
Как переопределить глобальный стиль из дочернего компонента и изменить область изменения только для этого компонента в angular
Как исключить из формы, развернутой с помощью скрипта Google Apps, параметр, который достиг своего предела
Кнопка Удалить строку таблицы удаляет все последующие строки