Scrapy - Kabuk

Açıklama

Scrapy kabuk, örümcek kullanmadan verileri hatasız kodla hurdaya çıkarmak için kullanılabilir. Scrapy kabuğunun temel amacı, çıkarılan kodu, XPath veya CSS ifadelerini test etmektir. Ayrıca, verileri aldığınız web sayfalarını belirlemenize yardımcı olur.

Kabuğu Yapılandırma

Kabuk , otomatik tamamlama, renklendirilmiş çıktı vb. Sağlayan güçlü bir etkileşimli kabuk olan IPython (etkileşimli bilgi işlem için kullanılır) konsolu yüklenerek yapılandırılabilir .

Unix platformu üzerinde çalışıyorsanız, IPython'u kurmak daha iyidir. IPython'a erişilemezse bpython da kullanabilirsiniz .

Kabuğu, SCRAPY_PYTHON_SHELL adlı ortam değişkenini ayarlayarak veya scrapy.cfg dosyasını aşağıdaki gibi tanımlayarak yapılandırabilirsiniz -

[settings]
shell = bpython

Kabuğun Başlatılması

Scrapy kabuk aşağıdaki komut kullanılarak başlatılabilir -

scrapy shell <url>

Url URL hangi veri ihtiyacı belirtir kazınarak.

Kabuğu Kullanma

Kabuk, aşağıdaki tabloda açıklandığı gibi bazı ek kısayollar ve Scrapy nesneleri sağlar -

Kullanılabilir Kısayollar

Kabuk, projede aşağıdaki kullanılabilir kısayolları sağlar -

Sr.No Kısayol ve Açıklama
1

shelp()

Yardım seçeneği ile birlikte mevcut nesneleri ve kısayolları sağlar.

2

fetch(request_or_url)

İstekten veya URL'den yanıtı toplar ve ilişkili nesneler uygun şekilde güncellenir.

3

view(response)

Gözlem için yerel tarayıcıda verilen istek için yanıtı görüntüleyebilir ve harici bağlantıyı doğru şekilde görüntüleyebilirsiniz, yanıt gövdesine bir temel etiket ekler.

Mevcut Hurda Nesneler

Shell, projede aşağıdaki mevcut Scrapy nesnelerini sağlar -

Sr.No Nesne ve Açıklama
1

crawler

Mevcut tarayıcı nesnesini belirtir.

2

spider

Mevcut URL için örümcek yoksa, yeni örümceği tanımlayarak URL'yi veya örümcek nesnesini işleyecektir.

3

request

Toplanan son sayfa için istek nesnesini belirtir.

4

response

Toplanan son sayfa için yanıt nesnesini belirtir.

5

settings

Mevcut Scrapy ayarlarını sağlar.

Kabuk Oturumu Örneği

Scrapy.org sitesini kazımayı deneyelim ve ardından verileri reddit.com'dan tarif edildiği gibi toplamaya başlayalım.

İlerlemeden önce, ilk önce aşağıdaki komutta gösterildiği gibi kabuğu başlatacağız -

scrapy shell 'http://scrapy.org' --nolog

Scrapy, yukarıdaki URL'yi kullanırken mevcut nesneleri gösterecek -

[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
[s]   item       {}
[s]   request    <GET http://scrapy.org >
[s]   response   <200 http://scrapy.org >
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[s] Useful shortcuts:
[s]   shelp()           Provides available objects and shortcuts with help option
[s]   fetch(req_or_url) Collects the response from the request or URL and associated 
objects will get update
[s]   view(response)    View the response for the given request

Ardından, aşağıdaki gibi gösterilen nesnelerin çalışmasına başlayın -

>> response.xpath('//title/text()').extract_first() 
u'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'  
>> fetch("http://reddit.com") 
[s] Available Scrapy objects: 
[s]   crawler     
[s]   item       {} 
[s]   request     
[s]   response   <200 https://www.reddit.com/> 
[s]   settings    
[s]   spider      
[s] Useful shortcuts: 
[s]   shelp()           Shell help (print this help) 
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects 
[s]   view(response)    View response in a browser  
>> response.xpath('//title/text()').extract() 
[u'reddit: the front page of the internet']  
>> request = request.replace(method="POST")  
>> fetch(request) 
[s] Available Scrapy objects: 
[s]   crawler     
...

Yanıtları İncelemek İçin Örümceklerden Kabuğu Çağırmak

Örümcekten işlenen yanıtları yalnızca bu yanıtı almayı bekliyorsanız inceleyebilirsiniz.

Örneğin -

import scrapy 

class SpiderDemo(scrapy.Spider): 
   name = "spiderdemo" 
   start_urls = [ 
      "http://mysite.com", 
      "http://mysite1.org", 
      "http://mysite2.net", 
   ]  
   
   def parse(self, response): 
      # You can inspect one specific response 
      if ".net" in response.url: 
         from scrapy.shell import inspect_response 
         inspect_response(response, self)

Yukarıdaki kodda gösterildiği gibi, aşağıdaki işlevi kullanarak yanıtları incelemek için örümceklerden kabuğu çağırabilirsiniz -

scrapy.shell.inspect_response

Şimdi örümceği çalıştırın ve aşağıdaki ekranı göreceksiniz -

2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
[s] Available Scrapy objects: 
[s]   crawler     
...  
>> response.url 
'http://mysite2.org'

Çıkarılan kodun çalışıp çalışmadığını aşağıdaki kodu kullanarak inceleyebilirsiniz -

>> response.xpath('//div[@class = "val"]')

Çıkışı şu şekilde görüntüler:

[]

Yukarıdaki satır yalnızca boş bir çıktı görüntüledi. Şimdi yanıtı aşağıdaki gibi incelemek için kabuğu çağırabilirsiniz -

>> view(response)

Yanıtı şu şekilde görüntüler:

True