2012-12-15 13 views
6

'u kullanarak iç içe 'img src' ayıklayın Bu konuda Scrapy veya python'u kullanmanın nispeten yeni biriyim. Birkaç farklı bağlantıdan ayıklamak için arıyorum ve bir HTMLXPathSelector ifadesi (sözdizimi) kullanarak sorunları yaşıyorum. Doğru sözdizimi için kapsamlı belgelere baktım ama henüz bir çözüm bulmaya geldim. Ben x.select için sözdizimi anladım düşünüyorumScrapy - xPathSelector

Page I am trying to extract the img src url from

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

class GeekSpider(BaseSpider): 
    name = "geekS" 
    allowed_domains = ["geek.com"] 
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     imgurl = hxs.select("//div[@class='article']//a/img/@src").extract() 
     return imgurl 

: Burada

bir bağlantı örneği ben den 'img src' ayıklamak için çalışıyorum olduğunu Ancak bu sözdizimine/yöntemine yenilediğimden emin değilim.

from scrapy.item import Item, Field 

class GeekItem(Item): 
    imgsrc = Field() 

netleştirmek için: Ne yapmak arıyorum sayfada olduğunu img src url ayıklamak olduğunu

İşte benim items.py dosyasıdır, temelde bunun için scrapy öğretici izledi. Daha önce anladığım tüm imaj src'lerini çıkarmam gerekmiyor (çok daha kolay).

Sadece onu daraltmak ve img src'in belirli URL'sini ayıklamak istiyorum. (Ben bu sitede çoktan sayfaya bakıyorum)

Herhangi bir yardım büyük beğeni topluyor!

DÜZENLEME - Güncelleme Kod Ben senin xpath ifadesi daha böyle olması gerektiğine inanıyoruz

+0

Yani yalnızca tıklanabilir bir bağlantı olan resmi (yani "kindle-fire-hd.jpg") istiyorsunuz? – Talvalin

+0

Evet, tam olarak. Görüntüyü kendisinin, sadece resmin URL'sini döndürmek istemiyorum, böylece saklayabiliyorum. – Twhyler

+0

Karışıklığı önlemek için, lütfen gönderildiği ilk örümcek kodunu güncelleyin ve ikincisini silin. :) – Talvalin

cevap

3

ve fonksiyonlarını anlamak umarım kolay olur ben inek = inek bazı sözdizimi hatalarını başlamıştı() Ben hafifçe değiştirdi . Bunu başka bir sayfada test ettim (the Amazon shipping center article) ve tıklanabilir görüntülerin onunu döndürdüm.

geek['imgsrc'] = x.select("//div[@class='article']//a/img/@src").extract() 

diğer sorunu gidermek için, GeekSpider koduna GeekItem ithalat gerekir.

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from geekspider.items import GeekItem # I'm guessing the name of your project here 

class GeekSpider(BaseSpider): 
    name = "geekS" 
    allowed_domains = ["geek.com"] 
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"] 

    def parse(self, response): 
     item = GeekItem() 
     hxs = HtmlXPathSelector(response) 
     item['imgsrc'] = hxs.select("//div[@class='article']//a/img/@src").extract() 
     return item 
+0

bırakın! Soruyu sorduğumdan, bazı sözdizimi hataları nedeniyle örümceği biraz değiştirdim. Yukarıdaki güncellenmiş kodu ekledim. Artık hataları almıyorum ama scraped_data.json kontrol edildiğinde tüm bunlar bir [sembol. Herhangi bir fikir? – Twhyler

+0

Ayrıca benim items.py dosyasını ekledim, bununla ilgili herhangi bir sorun olduğunu düşünmedim (scrapy öğreticisini neredeyse tam olarak izlediğim gibi), ancak sadece olası zaman ve karışıklığı gidermek için yukarıda ekledim. "Örümcek, Request, BaseItem veya None döndürmelidir" yazan bir hata alıyorum fark ettim. Yardım için teşekkürler! – Twhyler

+0

Yardımlarınız için teşekkürler, karışıklığı ve yaşadığım sorunları temizledim. Şimdi sadece bunu db'den çektiğim çok sayıda url üzerinden çalışmak ve onu db'ye geri dönüştürmek zorundayım. Eğlenceli olmalı. Tekrar teşekkürler! – Twhyler