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

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

24.04.2020, 14:32. Показов 5647. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru