Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
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
Süper Üye
Üyelik Tarihi: 14-09-2017
Yorum Sayısı: 263
Konu Sayısı: 1
Rep Puanı:
3
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
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
09-01-2018, Saat: 17:29
(Son Düzenleme: 09-01-2018, Saat: 17:33, Düzenleyen: oktay811.)
@excel hocam veri statik sadece anlık olarak çekecek, yani tabi veriler değişiyor ama sayfayı kayıtetme şansım yok diyelim
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
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")
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
09-01-2018, Saat: 21:16
(Son Düzenleme: 09-01-2018, Saat: 21:18, Düzenleyen: oktay811.)
Hocam html den gelen veri1-1,veri1-2... aralarına "," nasıl katabilirim? Sonra hepsi birbirine giriyor, ayırmak çok zor
Süper Üye
Üyelik Tarihi: 14-09-2017
Yorum Sayısı: 263
Konu Sayısı: 1
Rep Puanı:
3
@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 ?
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
WhatsApp da bot yapılıyor, ama telegramınki daha kullanışlı. Messenger varsa orda da yapabiliyorsunuz.
Süper Üye
Üyelik Tarihi: 14-09-2017
Yorum Sayısı: 263
Konu Sayısı: 1
Rep Puanı:
3
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
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
@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.
|