Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 24.04.2020
Сообщений: 15

Как спарсить заголовок из title?

24.04.2020, 14:32. Показов 5621. Ответов 7

Студворк — интернет-сервис помощи студентам
Подскажите как при парсинге считать текст из определенного тега title?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
 
import requests
from bs4 import BeautifulSoup  as bs  # parser
 
url = "https://sinoptik.ua/погода-москва"
r = requests.get(url)
html = bs(r.content, "html.parser")
for el in html.select("#content"):
    t_min = el.select(".temperature .min")[0].text
    t_max = el.select(".temperature .max")[0].text
    text = "Нужно считать текст из title"
    print("Погода: " + t_min + " " + t_max + "  " + text)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2020, 14:32
Ответы с готовыми решениями:

Парсиг Jsoup. Как спарсить не только title но и дату с ссылкой на новость ? У меня получается только title
Получается спарсить и добавить в listview только title . А мне нужно спарсить еще и дату с url Если по отдельности как ниже...

Как спарсить заголовок?
Здравствуйте! да... приходится нынче странными вещами заниматься. никогда не думал, что придется искать статьи на тему парсинг с помощью...

Как заменить title и заголовок в браузере
Добрый день форумчане! Я сам не создавал этот сайт - это полностью самописная cms. Есть на сайте раздел новости. Как сделать так...

7
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.04.2020, 20:42
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
 
import requests
from bs4 import BeautifulSoup  as bs  # parser
 
url = "https://sinoptik.ua/погода-москва"
r = requests.get(url)
html = bs(r.content, "html.parser")
 
print(html.select_one(".main.loaded .min").text)
print(html.select_one(".main.loaded .max").text)
print(html.select_one(".main.loaded .weatherIco").attrs.get('title'))
#print(html.select_one(".main.loaded .weatherIco")['title']) # вариант
0
0 / 0 / 0
Регистрация: 24.04.2020
Сообщений: 15
26.04.2020, 16:57  [ТС]
К сожалению, так можно получить только одно значение ...
Python
1
2
print(html.select_one(".main.loaded .weatherIco").attrs.get('title'))
#print(html.select_one(".main.loaded .weatherIco")['title']) # вариант
Я же хочу получать прогноз на несколько дней и в цикле и выводить, просто укоротил код в теме, возможно зря
и если я пишу по аналогии с вашим советом, то получаю ошибку когда индекс больше нуля
Python
1
2
3
4
5
6
7
8
for i in range(count):
    for el in html.select("#content"):
        t_min = el.select(".temperature .min")[i].text
        t_max = el.select(".temperature .max")[i].text
        text = el.select(".main.loaded .weatherIco")[i].attrs.get('title')
        #text = el.select(".main.loaded .weatherIco")[i]['title']
 
        print("Погода: " + t_min + " " + t_max + "  " + text)
но нашел ответ как работает
Python
1
2
 
text = el.select(".weatherIco")[i].get("title")
Добавлено через 38 минут
перепутал порядок циклов
PYTHON]
for el in html.select("#content"):
t_min = el.select(".temperature .min")
t_max = el.select(".temperature .max")
text = el.select(".main.loaded .weatherIco")
#text = el.select_one(".main.loaded .weatherIco")['title']

for i in range(count):
print("Погода: " + t_min[i].text + " " + t_max[i].text + " " + text[i].attrs.get('title'))
[/PYTHON]

Добавлено через 15 секунд
перепутал порядок циклов
Python
1
2
3
4
5
6
7
for el in html.select("#content"):
    t_min = el.select(".temperature .min")
    t_max = el.select(".temperature .max")
    text = text = el.select(".weatherIco")
    
for i in range(count):
        print("Погода: " + t_min[i].text + " " + t_max[i].text + "  " + text[i].get("title"))
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.04.2020, 17:18
Лучший ответ Сообщение было отмечено Kjeck как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests
from bs4 import BeautifulSoup  as bs  # parser
 
count = 3
 
url = "https://sinoptik.ua/погода-москва"
r = requests.get(url)
html = bs(r.content, "html.parser")
 
days = html.select('.tabs > .main')
 
for day in days:
    dow = day.select_one('.day-link').text
    date = day.select_one('.date').text
    month = day.select_one('.month').text
 
    weather = day.select_one('.weatherIco')['title']
    min_temp = day.select_one('.temperature .min').text
    max_temp = day.select_one('.temperature .max').text
    
    print('{:11} {:2} {:8}: {:9} - {:10} ({})'.format(dow, date, month, min_temp, max_temp, weather))
Code
1
2
3
4
5
6
7
Воскресенье 26 апреля  : мин. -1°  - макс. +9°  (Переменная облачность) 
Понедельник 27 апреля  : мин. 0°   - макс. +8°  (Переменная облачность) 
Вторник     28 апреля  : мин. +2°  - макс. +10° (Переменная облачность) 
Среда       29 апреля  : мин. +4°  - макс. +10° (Сплошная облачность, сильный дождь) 
Четверг     30 апреля  : мин. +4°  - макс. +10° (Облачно с прояснениями, мелкий дождь) 
Пятница     01 мая     : мин. +7°  - макс. +19° (Облачно с прояснениями, дождь) 
Суббота     02 мая     : мин. +7°  - макс. +11° (Сплошная облачность)
1
0 / 0 / 0
Регистрация: 24.04.2020
Сообщений: 15
28.04.2020, 01:40  [ТС]
Да, так работает
Также ваш вариант быстрее моего на 20%

Ради интереса написал простой скрипт для сравнения:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Иамеряет время выполнения нескольких варинтов модуля или функции
 
import time
import requests
from bs4 import BeautifulSoup  as bs  # parser
 
def get_weather(count=7):
    url = "https://sinoptik.ua/погода-москва"
 
    r = requests.get(url)
    html = bs(r.content, "html.parser")
    for el in html.select("#content"):
        ls_week_day = el.select(".day-link")
        ls_day = el.select(".date")
        ls_month = el.select(".month")
        ls_t_min = el.select(".temperature .min")
        ls_t_max = el.select(".temperature .max")
        ls_text = el.select(".weatherIco")
 
    for i in range(count):
        week_day = ls_week_day[i].text
        day = ls_day[i].text
        month = ls_month[i].text
        t_min = ls_t_min[i].text
        t_max = ls_t_max[i].text
        text = ls_text[i].get("title")
        print(
            ' {:11} {:>2} {:6}: {:5} - {:5} ({})'.format(week_day, day, month, t_min, t_max,
                                                         text))
 
def alt_weather():
    url = "https://sinoptik.ua/погода-москва"
    r = requests.get(url)
    html = bs(r.content, "html.parser")
 
    days = html.select('.tabs > .main')
 
    for day in days:
        dow = day.select_one('.day-link').text
        date = day.select_one('.date').text
        month = day.select_one('.month').text
 
        weather = day.select_one('.weatherIco')['title']
        min_temp = day.select_one('.temperature .min').text
        max_temp = day.select_one('.temperature .max').text
 
        print('{:11} {:2} {:8}: {:9} - {:10} ({})'.format(dow, date, month, min_temp, max_temp,
                                                          weather))
 
 
# ------------ БЛОК ДЛЯ НАСТРОЕК -------------
repit = 100  # Кол-во циклов (повторений) замера
def run_test1():
    # В этой функции пищем что хотим замерить
    get_weather()
 
def run_test2():
    # В этой функции пищем что хотим замерить
    alt_weather()
# -------------------------------------------
 
avr_time1 = 0
avr_time2 = 0
for i in range(repit):
    start_time = time.time()
    run_test1()
    avr_time1 += time.time() - start_time
 
    start_time = time.time()
    run_test2()
    avr_time2 += time.time() - start_time
 
print("--" * 10)
print(f"Repit: {repit}")
print(f"Time(avr) 1: {avr_time1 / repit:.4f}")
print(f"Time(avr) 2: {avr_time2 / repit:.4f}\n", "--" * 10, )
--------------------
Repit: 100
Time(avr) 1: 0.6440
Time(avr) 2: 0.5369
--------------------
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
28.04.2020, 12:21
Цитата Сообщение от Kjeck Посмотреть сообщение
Также ваш вариант быстрее моего на 20%
это вы ещё lxml не пробовали
0
0 / 0 / 0
Регистрация: 24.04.2020
Сообщений: 15
28.04.2020, 14:45  [ТС]
Да, не пробовал ...
Я пока только начал изучать Python , и парсинг начал так сказать с базового ...
Да и тему изначально открыл в ветке "Python для начинающих", сюда ее модераторы переместили

Добавлено через 1 минуту
Также ваш вариант быстрее моего на 20%
Хотя пока не понимаю почему
Я думал, что мой вариант быстрее, т.к. сначала делаю выборку, а потом перебираю элементы выборки, а у вас выборка делается каждый раз, хоть и одного элемента …

Я раньше с БД на 1С работал – там идеология: сначала запросом выбираем все необходимые данные и уже потом работаем с выборкой без обращения к СУБД
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
28.04.2020, 17:41
Цитата Сообщение от Kjeck Посмотреть сообщение
сначала делаю выборку, а потом перебираю элементы выборки, а у вас выборка делается каждый раз, хоть и одного элемента
У Jabbson, главная выборка делается один раз в строчке days = html.select('.tabs > .main'). И потом в цикле сразу же достается нужный атрибут, то есть текст.
А у вас 1) пробег (цикл) по вложенным элементам через select на каждой итерации и 2) для получения текста еще и второй цикл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2020, 17:41
Помогаю со студенческими работами здесь

Как сместить header (title, заголовок) шаблона на wordpress?
Здравствуйте! Помогите решить вопрос? Поставил движок wordpress 4.7.2 на него шаблон Avada. Сайт fotoboom.kz, хотелось бы приспустить...

Как использовать заголовок страницы для тега alt и title?
Приветствую, интересует такой момент, на сайте при создании объявления в атрибуте ALT пусто, нужно, чтобы при публикации, в h1, alt и TITLE...

как спарсить загружаемый doc и pdf файл в php и занести его в базу по полям title body and date publisher
как спарсить загружаемый doc и pdf файл в php и занести его в базу по полям title body and date publisher

Как с помощью js найти тег title и вставить в него введённый в input text заголовок?
Я использую CKEditor. Как с помощью js найти тег title и вставить в него введённый в input text заголовок. Если тега нет, то добавить.

Спарсить название html-страницы (содержимое тега title)
Доброго времени суток! Есть сайт со страницей вида: <html> <head> <title>MPAYKYAYRRALM</title> </head> <body>...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru