Monthly Archives: Kasım 2014

Genel

Zenginlik İyidir

tas-arabaKabarık bir banka hesabına sahipseniz, yeni araç satın almak için ne bir nedene, ne de ay sonu gibi parasal sorunları düşünmeye ihtiyacınız olmayabilir.

Ancak…

Aynı araçla kaza yapmanız durumunda kabarık bir dost listesine sahip değilseniz, yardımınıza koşacak birilerini bulamayabilirsiniz.

***

Geçtiğimiz hafta geçirdiğim operasyonda yanımda olan, arayan/soran, selam ileten, gelip ziyaret eden ve hatta aklından geçiren tüm dostlarıma sonsuz teşekkür ederim. Planlı ancak acil bir operasyon olduğu için haber veremediğim dostlarımdan özür diliyorum.

Dün itibarıyla taburcu olduk. Şu an herşey yolunda.
Sevgiler
İbrahim Gündüz

Genel

Python ile Web Crawling

Aslında üstüne pek de yazı yazılası bir konu değil ama yine de belki meraklısının işine yarar :)

Herhangibir dille web sitesi crawle etmek için bilinmesi gereken 3 şey

1- Nasıl http isteği gönderebilirim ?
2- Nasıl xpath sorgusu gerçekleştirebilirim ?
3- Elde ettiğim elemanların özelliklerine nasıl ulaşabilirim ?

Dilerseniz konuyu bu başlıklar altında inceleyelim.

1- Nasıl http isteği gönderebilirim ?

Python ile http request gönderebilmek için requests veya urllib2 kütüphanelerini kullanabilirsiniz.

Ben bu yazıdaki örneklerde urllib2 kullanacağım.

Örnek GET isteği:

	url = 'http://edition.cnn.com/'
	try:
		request = urllib2.Request(url)
		response = urllib2.urlopen(request).read()
	except urllib2.URLError:
		print "Connection failed. Url: %s" % url

2- Nasıl xpath sorgusu gerçekleştirebilirim ?

Python ile xpath sorgusu gerçekleştirmek için xml.ElementTree veya lxml kullanabilirsiniz.

Ben bu yazıdaki örneklerde lxml kullanacağım.

Aşağıdaki örnekde, CNN.com sitesindeki haber kategorilerini sorguluyoruz.
Örnek Xpath sorgusu:

	from lxml import html
	query = '//*[@id="intl-menu"]/li/a'
	root = html.fromstring(response)
	categories = root.xpath(query)

3- Elde ettiğim elemanların özelliklerine nasıl ulaşabilirim ?

Bir önceki örnde kullandığım lxml kütüphanesini kullanıyorsanız, xpath sorgusu sonuncunda dönen elemanın DOM özelliklerine ulaşmak için get() metodunu, içindeki metne ulaşmak için text özelliğini, alt elemanlarına ulaşmak için getchildren() metodunu kullanabilirsiniz.

for category in categories:
	children = category.getchildren()
	text = children and children[0].text or category.text
	print text, category.get('href')

Son olarak herşeyi bir araya getirelim.

from lxml import html
import urllib2

url = 'http://edition.cnn.com/'
try:
	request = urllib2.Request(url)
	response = urllib2.urlopen(request).read()
except urllib2.URLError:
	print "Connection failed. Url: %s" % url

query = '//*[@id="intl-menu"]/li/a'
root = html.fromstring(response)
categories = root.xpath(query)

for category in categories:
	children = category.getchildren()
	text = children and children[0].text or category.text
	print text, category.get('href')

Elde edeceğimiz sonuç aşağıdaki biçimde olacaktır.

Home /
Video /video/
World /WORLD/
U.S. /US/
Africa /AFRICA/
Asia /ASIA/
Europe /EUROPE/
Latin America /LATINAMERICA/
Middle East /MIDDLEEAST
Money http://money.cnn.com/INTERNATIONAL/
World Sport /SPORT/
Entertainment /SHOWBIZ/
Tech /TECH/
Travel http://travel.cnn.com/
iReport http://ireport.cnn.com/