Merhabalar,

Alıştırma olsun diye Beautiful Soup 4 ve düzenli ifadeler kullanarak Radikal'in internet sitesinden veri çekecek bir uygulama yazıyordum. Her günün yazarlarının isimleri, yazı başlıkları ve linklerini çektim, oradan da yazıya ulaşıp metni çekmek istiyordum fakat başarılı olamadım.

Örneğin şu sayfadaki metni çekmek istemiştim.

<div id="metin2" class="BlackContent" onkeydown="onKeyDown();"> ...

Metin burada fakat BeautifulSoup'un .string niteliğiyle (attribute) metni elde edemiyorum çünkü BeautifulSoup'un HTML üzerinde gezinme becerileriyle bu alana ulaşamadım. İlk sorum, bunun bir yolunun olup olmadığıyla ilgili. Ben bu alana en yakın şu şekilde gelebiliyorum:

    from bs4 import BeautifulSoup
    from urllib import urlopen
    import string
    import re

   ac = urlopen("http://www.radikal.com.tr/Radikal.aspx?aType=RadikalYazar&ArticleID=1092067&Yazar=KORAY-CALISKAN&CategoryID=97")
   soup = BeautifulSoup(ac)
   ac.close()

   metin = str(soup("div", id="metin2"))

Aslında bu şekilde ulaşmak da yeterli olabilirdi, düzenli ifadelere hakim olabilseydim. :) Köşe yazısının olduğu yerde şu etiketler karakteristik:

< ... id="metin2" ... ><p> Köşe yazısı </p>

id="metin2" ile başlatabiliyorum fakat boşluk olsun karakter olsun fark etmeden </p>'ye kadar eşleyecek ifadeyi bulamadım. Acaba düzenli ifade yerine string işlemleriyle mi yapmalı? Bu seçimi yapmak zorunda kaldığımda ikisinden hangisinin daha mantıklı olacağına nasıl karar verebilirim? Okuduğum bütün kitaplarda, sayfalarda düzenli ifadelerin çözüm gibi gözüken belalar olduğu yazıyordu, hiçbir yerde nasıl değerlendirebileceğimle ilgili ipucu yoktu. :)

Teşekkürler şimdiden.

soruldu: 24 Haz '12, 16:17

misblay's gravatar image

misblay
1113
cevap kabul oranı: 0%

değiştirildi: 07 Ağu '13, 09:20

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

beutiful soup tan anlamıyorum fakat "metin" i soup ile aldıktan sonra yine soup2=BeautifulSoup(metin) gibi birşey olmuyor mu? yada en basiti metni üzerinde regex işlemleri yapmak.. regex ile metin stringindeki "p-/p" tagları arasındaki metini al diyebilirsiniz...

(12 Ağu '13, 16:14) dreampowder dreampowder's gravatar image

HTML etiketleri takip etme, bocalar durursun ve HTML etiketleri stabil değildir. Bunun yerine metinde yer alan düzenli ifadeleri takip et. Örneğin yazarın ismini görürsen bir süt P etiketine veya iki üst DIV etiketine git ve metni kopyala gibi! Yada kullanabiliyorsan PhantomJS kullanmayı dene.

(12 Ağu '13, 18:48) Oğuz Çelikdemir O%C4%9Fuz%20%C3%87elikdemir's gravatar image

sorum bu hangi dil oluyor? ikinci konu. pek bilgim yok ama dışardan bir tavsiye yapmak istesem, metin2 id'li divin içindeki bütün texti al ve

ve

replace ile boşluk olarak değiştir.İşine yarar mı acaba ?

from bs4 import BeautifulSoup
    from urllib import urlopen
    import string
    import re

   ac = urlopen("http://www.radikal.com.tr/Radikal.aspx?aType=RadikalYazar&ArticleID=1092067&Yazar=KORAY-CALISKAN&CategoryID=97")
   soup = BeautifulSoup(ac)
   ac.close()

   metin = str(soup("div", id="metin2"))
   metin=metin.Replace("<p>"," ").Replace("</p>"," ")
permanent link

cevaplandı: 14 Ağu '13, 01:34

erhanncetinn's gravatar image

erhanncetinn
11
cevap kabul oranı: 0%

değiştirildi: 15 Ağu '13, 03:02

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×41

Soruldu: 24 Haz '12, 16:17

Görüntüleme: 1,168 kez

Son güncelleme: 15 Ağu '13, 03:02

powered by BitNami OSQA