Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
BeautifulSoup4 Hakkında yardım
#1
Bir sitedeki verileri çekmeye çalışıyorum lakin Bs kullanım mantığını henüz çözemedim, yabancı sitelerden biraz baktım fakat bir yere kadar, şimdiye kadar deneme yanılma yoluyla biiraz ilerledim bundan sonrası yapamayacağım, yardım ederseniz çok sevinirim. 

Kod:
<tr class="NormalBlack" style="color:Black;background-color:#EEEEEE;border-width:1pt;border-style:Solid;white-space:nowrap;">
<td>VERİ1-1</td><td>VERİ1-2</td><td align="center" style="width:70px;">1</td><td align="center" style="font-weight:bold;"><font color="green">VERİ1-3</font></td><td align="center">VERİ1-4</td><td align="center">VERİ1-5</td><td align="center">VERİ1-6</td><td align="center">VERİ1-7</td><td align="center">VERİ1-8</td><td align="center">VERİ1-9</td><td align="center"><font color="black"><b>VERİ1-10</b></font></td><td align="center"><font color="Green"><b>VERİ1-11</b></font></td><td align="center">VERİ1-12</td><td align="center">VERİ1-13</td><td align="center">VERİ1-14</td><td align="center">VERİ1-15</td><td align="center">VERİ1-16</td><td align="center">
               
</tr>

bu html kodu sayfanın içinde 11-12 defa tekrar ediyor ve bana lazım olanda içinde yazdığım veri1,veri2... Beautifulsoup ile  html kodunu yazdırabiliyorum fakat ondan sonrasını çeviremiyorum, yani aşağıdaki taslak halinde yapmak istiyorum fakat olmuyor.

başlık1
sonuc1:Veri1-1
sonuc2:veri1-2
....
başlık11
sonuc1:veri11-1
sonuc2:veri11-2
Ara
Cevapla
#2
bu veri js ile oluşturuluyosa beautifulsoup kullan tamam ama, veri statikse anlamadığın bi modülle kafanı bulandırmak yerine requests ya da urllible sayfayı indirip regexple veriyi al
Ara
Cevapla
#3
@excel hocam veri statik sadece anlık olarak çekecek, yani tabi veriler değişiyor ama sayfayı kayıtetme şansım yok diyelim Big Grin

sayfanın bir kopyası : http://nfhost.net/~oktay811/den3.html

sayfa bizim obisis sayfası, telegram botu yapmaya çalışıyorum ve sayfadan notları ve diğer bilgileri almaya çalışacağım
Ara
Cevapla
#4
bs4 biraz araştırınca kullanışlıdır, replace veya split gibi işlemlerle fazla uğraştıracak şeyleri çok rahat bir şekilde çekersin. Şimdi vereceğim kullanım da senin işine yarayacaktır. Şimdi, yukarıdaki kod içinde verdiğin "td" tagleri ile ilgili olan kısmı "asd.txt" diye bir dosyaya kaydedip şu kodları kullandım ve dediğin verileri listeledim. Sen de bu örneğe bakarak kendi kodlarına entegre edersin.

PHP Kod:
from bs4 import BeautifulSoup

dosya 
open("asd.txt").read()

soup BeautifulSoup(dosya"html.parser")
veri soup.find_all('td')

for 
i in veri:
    print 
i.text.encode("utf-8"
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#5
Hocam html den gelen veri1-1,veri1-2... aralarına "," nasıl katabilirim? Sonra hepsi birbirine giriyor, ayırmak çok zor Sad
Ara
Cevapla
#6
@oktay811 neden kaydetme şansın yok ? bu arada bu gönderiyi gördükten sonra aynısını bizim okulun sistemi için yaptım, güzel oldu. fikir için sağol ama telegram kullanmıyorum vatsap var sadece başka nasıl yapabilirim ?
Ara
Cevapla
#7
WhatsApp da bot yapılıyor, ama telegramınki daha kullanışlı. Messenger varsa orda da yapabiliyorsunuz.
Ara
Cevapla
#8
peeki teşekkür ederim
Ara
Cevapla
#9
Kod:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- coding: cp1254 -*-
whitelist = set('abcÇdefgğhıijklmnoöprsştuüvyzqwABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZQW 0123456789')
import sys, time
from bs4 import BeautifulSoup
from xml.sax import saxutils as su
import requests
import telepot
from telepot.loop import MessageLoop
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton
from telepot.namedtuple import InlineQueryResultArticle, InputTextMessageContent
import mechanize



def on_chat_message(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)

    ogrnc = msg['text']
    for i in ogrnc:
    
        i = i.strip()
        i = i.split(",")
    
    username = "i[0]"
    password = "i[1]"
    br = mechanize.Browser()
    br.set_handle_robots(False)

    br.open("https://obisis.erciyes.edu.tr/")

    br.select_form(nr=0)
    br.form["ctl02$txtboxOgrenciNo"]=username
    br.form["ctl02$txtBoxSifre"]=password
    br.method="POST"
    br.submit()

    # Asagidaki html sayfasinin sonucunu verir
    response = br.open("https://obisis.erciyes.edu.tr/Default.aspx?tabInd=2&tabNo=3").read()

    soup = BeautifulSoup(response, 'lxml')
    for bilgi in soup.find_all('table', class_="HeadAp"):
        no = bilgi.find('span', attrs={'id': 'Banner1_Kullanici1_txtOgrenciNo'})
        isim = bilgi.find('span', attrs={'id': 'Banner1_Kullanici1_txtAdiSoyadi'})
        fakulte = bilgi.find('span', attrs={'id': 'Banner1_Kullanici1_txtFakulteAdi'})
        bol = bilgi.find('span', attrs={'id': 'Banner1_Kullanici1_txtBolumAdi'})
        gano = bilgi.find('span', attrs={'id': 'Banner1_Kullanici1_txtSinifSeneGano'})
        print(fakulte).text
        print(bol).text
        print(gano).text
        print(no).text
        print(isim).text
    index = 0
    for notlar in soup.find_all('tr', class_="NormalBlack"):
        index += 1
        sonuc = notlar.text
              
        print sonuc

    bot.sendMessage(chat_id, 'tamam')

        
def on_callback_query(msg):
    query_id, from_id, query_data = telepot.glance(msg, flavor='callback_query')
    print('Callback Query:', query_id, from_id, query_data)

    bot.answerCallbackQuery(query_id, text='işlem tamam')
  


bot = telepot.Bot('527493034:AAE-7HaYW2aMFPYzZlzJ1cYFD7QO6x3VY4s')
MessageLoop(bot, {'chat': on_chat_message,
                  'callback_query': on_callback_query}).run_as_thread()
print('Listening ...')

while 1:
    time.sleep(3)

Şöyle birşey yazdım fakat hala mesajları geri gönderme konusunda ve sayfadan gelen verileri ayırma konusunda sıkıntılarım var Big Grin
Ara
Cevapla
#10
@oktay811 olur tabi çünkü sistematik gitmiyosun, temel konuları öğrenmeden seviyenden daha ilerideki işleri yapmak istiyosun. Ve sana verilen tavsiyeleri dinlemeyip yerine farklı şeyler kullanıyosun. Mesela sana verdiğim örneği kod içinde kullanmamışsın bile, bellki anlık kararlar değiştiriyosun. Ama benim sana asıl tavsiyem aç temel konuları 1-2 hafta temel konulara çalış, sonra bot vs yaparsın.

Konu genel bir bs4 sorusu olmaktan çıktığı için python bölümünden istek/soru/öneri bölümüne taşıyorum, ordan devam edersin.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Soru Vpn hakkında Umutrc 0 650 26-02-2019, Saat: 23:52
Son Yorum: Umutrc
  Facebook oto dosya yükleme hakkında ahmettepe 4 1,362 09-11-2018, Saat: 15:18
Son Yorum: oktay811
  Python Yardım serseriarap 8 3,927 27-12-2017, Saat: 01:40
Son Yorum: serseriarap
  Çözüldü Lucky patcher'la ilgili yardım olcan 14 10,951 19-04-2017, Saat: 18:29
Son Yorum: olcan
  İnglizice Yardım :) ulas12 3 2,970 01-04-2017, Saat: 16:47
Son Yorum: Umutrc

Hızlı Menü:


Konuyu Okuyanlar: 2 Ziyaretçi
Change Theme