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