Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Python и немного парсинга  (Прочитано 459 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн funk2256

  • Автор темы
  • Активист
  • *
  • Сообщений: 430
  • Arch + Xfce
    • Просмотр профиля
Python и немного парсинга
« : 14 Май 2018, 18:44:26 »
Ув, хочу запилить скрипт под коньки, но не в этом суть.
Нужно спарсить Тык

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup

url = 'https://forum.ubuntu.ru/index.php?action=login2'
session = requests.Session()
       
params = {
    'user' :'funk2256',
    'passwrd' : '****'
    }
r = session.post(url, params)

soup = BeautifulSoup(r.text, 'html.parser')
name_user = soup.find("li", class_="normaltext").text
title = soup.find("title").text
message =soup.find(class_="normaltext").findNext('li').text
print('\t',title[:38],'\n',name_user,'\n', message)



url2 = 'https://forum.ubuntu.ru/index.php?action=unread'
r = session.post(url2)
soup = BeautifulSoup(r.text, 'html.parser')
table2 = soup.find_all('td')
table3 = soup.find_all('span')

#print(table2) #Вывод таблицы
#print(table3) #Вывод <span>

И так, как я определил, на странице данные находятся в таблице, ну или через span  можно получить.
Ну и мне нужны только заголовки, не понимаю как их вытащить. :'( :idiot2:, причем не понимаю ни как через таблицу их сдернуть, ни как их сдернуть через <span>.
Заранее спасибо всем участвующим.
« Последнее редактирование: 14 Май 2018, 18:51:49 от funk2256 »
Feci quod potui, faciant meliora potentes.(Я сделал всё, что смог, пусть те, кто смогут, сделают лучше)
Новичкам
Шпаргалка команд

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3005
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #1 : 16 Май 2018, 12:28:07 »
Like this one
Код: Python
  1. table2 = soup.find_all('td', class_="subject windowbg2")
  2.  
  3. for td in table2 :
  4.     for ceil in td.children :
  5.         head = ceil.find('span')
  6.         if (head != -1) :
  7.             title = head.find('a').text
  8.             print(title)
  9.  
  10.  
  11.  
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5558
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #2 : 16 Май 2018, 13:45:07 »
EvangelionDeath, Лишнюю операцию зачем?
Код: Python
  1.             print(head.find('a').text)
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3005
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #3 : 16 Май 2018, 16:37:38 »
Azure, ему надо добавлять в табличку, потому просто для наглядности (ибо можно и тернарной операцией обойтись). И что бы проверку не забыл %)
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн funk2256

  • Автор темы
  • Активист
  • *
  • Сообщений: 430
  • Arch + Xfce
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #4 : 17 Май 2018, 17:28:37 »
Упс... Забыл про тему... r = s.get(url,headers=headers)
text = re.findall(r'\<span[^\>]+><a[^\>]+>(.*?)\<\/a\>\<\/span\>', r.text)
вот так помогли решить вопрос.

По итогу вот код
Ну и для чего это делалось.
Feci quod potui, faciant meliora potentes.(Я сделал всё, что смог, пусть те, кто смогут, сделают лучше)
Новичкам
Шпаргалка команд

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3005
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #5 : 17 Май 2018, 19:04:50 »
funk2256, Два замечания по коду
1) я стесняюсь спросить: а для чего вы тогда там подключаете еще и парсер, если его не используете. А потом по форуму темы - программисты криворукие, память жрет
2) Для чего вы указываете ИД сессии? Не стоит так делать, если Вы не используете куки при работе скрипта
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн funk2256

  • Автор темы
  • Активист
  • *
  • Сообщений: 430
  • Arch + Xfce
    • Просмотр профиля
Re: Python и немного парсинга
« Ответ #6 : 17 Май 2018, 19:09:38 »
EvangelionDeath, учту оба замечания, пойду править код. Всем спасибо.
Feci quod potui, faciant meliora potentes.(Я сделал всё, что смог, пусть те, кто смогут, сделают лучше)
Новичкам
Шпаргалка команд

 

Страница сгенерирована за 0.074 секунд. Запросов: 24.