Ayrıcalıklı Size hurda ile küçük bir program yapmayı öğretin! (Kod eklenmiştir)

Bu makale, scrapy ve pycharm'ın kurulumu ve yapılandırması sırasında hatalara yatkın olan hatalar ve çözümler sağlar. Aynı zamanda, ağ eğiticisinin klasik "tarama Douban 9 noktalı kitap listesi" örneğini gösterir. Adım kodlarının tümü, editörün anlayışını sağlar ve oldukça çalıştırılabilir olan olası hatalara çözümler sunar.

içindekiler

I.Giriş

2. İlke

2.1 Tarama süreci

2.2 Her parçanın açıklaması

2.3 Hurda veri akışının analizi

Üç. Anlama

4. Gerçek mücadele

4.1 Birincisi hurdalı kurmak

4.2 Projeyi kurma ve pycharm ve pycharm konfigürasyonunu indirme

4.3 Başlık adını ve yazar adını çıkarın

4.4 hurda süreç analizi

4.5 Küçük projelerin zorluğunu artırmak

Beş. Hurda bina projesi hakkında geri bildirim

5.1 Böcekleri daha hızlı bulma

5.2 Bir arada bulunma yorumlayıcısının neden olabileceği çeşitli hatalar

6. Bilgi eki

6.1 Spider'da sınıflar ve yöntemler

I.Giriş

Scrapy, web sitelerini kazımak ve sayfalardan yapılandırılmış verileri çıkarmak için kullanılan, Python geliştirmeye yönelik hızlı, üst düzey bir ekran kazıma ve web kazıma çerçevesidir. Scrapy çok yönlüdür ve veri madenciliği, izleme ve otomatik test için kullanılabilir.

Bazı tarayıcı meraklıları, hurdalığın avantajının, yüksek derecede özelleştirmeye sahip olması ve tarama teknolojisini öğrenmek ve araştırmak için uygun olması olduğunu düşünür. Öğrenilmesi gereken daha fazla bilgi vardır, bu nedenle bir tarayıcıyı tamamlamak uzun zaman alır. Bazı insanlar ayrıca scrapy'nin python3 üzerinde çalışamayacağını ve uygulanabilirliğinin hayal edildiği kadar geniş olmadığını söyledi.

Genel olarak, bir web tarayıcısı, verileri her yerde tarayan veya İnternet üzerinden yönlendiren bir programdır. Daha profesyonel bir açıklama, belirli bir web sitesinin HTML verilerini taramaktır. Bir web sayfasını taramanın genel yöntemi, bir giriş sayfası tanımlamaktır ve daha sonra genellikle bir sayfada diğer sayfaların URL'leri olacaktır, bu nedenle bu URL'ler mevcut sayfadan alınır ve tarayıcının tarama kuyruğuna eklenir ve ardından yeni sayfaya girildikten sonra tekrar tekrar Yukarıdaki işlemleri gerçekleştirin.

2. İlke

Scrapy, ağ iletişimlerini yönetmek için zaman uyumsuz bir ağ kitaplığı olan Twisted'ı kullanır.Açık bir mimariye sahiptir ve çeşitli gereksinimleri esnek bir şekilde karşılayabilen çeşitli ara katman arabirimleri içerir.

Scrapy'nin sonuçlarını ve çalışma prensiplerini ilk kez anlamaya çalıştığımızda, bu tabloyu aşağıdakileri tanıtmak için kullanacağız:

2.1 Tarama süreci

Yukarıdaki şekildeki yeşil çizgi veri akışıdır.İlk olarak, Planlayıcı, ilk URL'den başlayarak bunu İndirici'ye indirecek ve indirmeden sonra, analiz için Spider'a teslim edilecektir. Spider tarafından analiz edilen iki sonuç vardır: birinin daha fazla yakalanması gerekir Daha önce analiz edilen "sonraki sayfa" bağlantıları gibi bağlantılar Planlayıcıya geri gönderilecektir; diğeri kaydedilmesi gereken verilerdir ve verilerin sonradan işlenmesi olan Öğe Kanalına gönderilecektir (ayrıntılı analiz , Filtreleme, depolama vb.). Ek olarak, gerekli işlemleri gerçekleştirmek için veri akışı kanalına çeşitli ara yazılımlar kurulabilir.

2.2 Her parçanın açıklaması

  • Motor (Scrapy Motor): Tüm sistemin veri akışı işlemesini işlemek ve işlemleri tetiklemek için kullanılır.

  • Zamanlayıcı (Zamanlayıcı): Motor tarafından gönderilen isteği kabul etmek, kuyruğa itmek ve motor tekrar istediğinde geri dönmek için kullanılır.

  • İndirici: Web içeriğini indirmek ve web içeriğini örümceğe döndürmek için kullanılır.

  • Örümcekler: Örümcekler genellikle belirli alan adları veya web sayfaları için ayrıştırma kurallarını formüle etmek için kullanılır. Yanıtı analiz etmek ve öğeyi (yani elde edilen öğeyi) veya takip için ek URL'yi çıkarmak için bir sınıf yazın. Her örümcek, belirli (veya bazı) bir web sitesini yönetmekten sorumludur.

  • Öğe Boru Hattı: Örümcekler tarafından web sayfalarından çıkarılan öğelerin işlenmesinden sorumlu olan onun ana görevi, verileri netleştirmek, doğrulamak ve saklamaktır. Sayfa örümcek tarafından ayrıştırıldığında, proje kanalına gönderilecek ve veriler birkaç özel sırayla işlenecektir.

  • Downloader Yazılımları : Scrapy motoru ve indirici arasındaki kanca çerçevesi, esas olarak Scrapy motoru ile indirici arasındaki talebi ve yanıtı işlemek için kullanılır.

  • Örümcek Yazılımları: Scrapy motoru ile örümcek arasındaki kanca çerçevesinin ana görevi, örümceğin yanıt girdisini ve istek çıktısını işlemektir.

  • Zamanlayıcı Ara Yazılımları: Scrapy motoru ile çizelgeleme arasındaki ara yazılım, Scrapy motorundan çizelgelemeye gönderilen istek ve yanıt.

2.3 Hurda veri akışının analizi

Aşağıdaki gibi ilerleyin:

AŞAMA 1: Motor bir web sitesi açar (bir alan adı açın), web sitesini işleyen örümceği bulur ve örümceğe taranacak ilk URL'leri ister.

ADIM 2: Motor, Örümcek'ten taranacak ilk URL'yi alır ve Zamanlayıcı'daki İstek ile planlar.

AŞAMA 3: Motor, planlayıcıdan sonraki URL'nin taranmasını ister.

ADIM 4: Planlayıcı, taranacak sonraki URL'yi motora döndürür ve motor, URL'yi indirme ara yazılımı (istek yönü) aracılığıyla indiriciye iletir.

ADIM 5: Sayfa indirildikten sonra, indirici sayfa için bir yanıt oluşturur ve bunu indirme ara yazılımı (yanıt yönü) aracılığıyla motora gönderir.

ADIM 6: Motor, indiriciden Yanıtı alır ve Örümcek ara yazılımı (giriş yönü) aracılığıyla işlenmek üzere Örümcek'e gönderir.

ADIM 7: Spider, Yanıtı işler ve taranan Öğeyi ve (takip eden) yeni İsteği motora döndürür.

ADIM 8: Motor, taranan Öğeyi (Örümcek tarafından döndürülen) Öğe Kanalına gönderir ve İsteği (Örümcek tarafından döndürülen) planlayıcıya gönderir.

ADIM 9: (İkinci adımdan itibaren) Planlayıcıda başka istek kalmayana ve motor web sitesini kapatana kadar tekrarlayın.

Alıntı kaynağı: "Learning Scrapy Introduction"

Yazar: JasonDing

Bağlantı:

Üç. Anlama

Birçok popüler bilim web sitesi hurdadan bahsettiğinde, tarayıcı çerçevesi olarak hurdalıyı tanıtacaklar. Çerçevenin rolü, tekrar eden çalışmayı özetlemektir.

Örneğin, bir veri kümesini işlemek için Linux sistemini kullanıyorsanız, bu dört adım alır. Her adım, komut satırının yeniden yazılmasını gerektirir ve yeni bir dizin oluşturulur. Ayrıca ortada bir bekleme süresi olacaktır. Bu durumda, bu veri kümesinin işlenmesi uzun zaman alır. , Ve dizinde depolanan ilgili dosyaları unutabilirsiniz. En rahatsız edici olan şey, gruptaki diğer kişilerin diğer verileri aynı şekilde işlemesi gerektiğinde, işinizi tekrar etmeniz gerektiğidir, bu da çok fazla gereksiz zaman kaybına neden olur. .

Daha sonra, bazı insanlar komutu sh dosyasına yazmayı ve doğrudan çalıştırmayı düşündü.Bu, dört adım arasında bekleme süresinden tasarruf sağlar.Programın çalışma süresi değişmedi, ancak dağınık süreç, her ikisini de iyileştiren genel süreç haline gelir. Bu, verimliliği artırır ve insanların uzun süre bilgisayarın başında kalmasını ve sürekli olarak komut yazmasını önler.

Daha sonra, öncüllerin sh dosyalarına dayanarak, birisi veri kaynağını, yolu ve farklı kullanıcılar tarafından farklılık gösteren diğer girdileri dışarıda bırakan bir çerçeve yazıp yazamayacaklarını düşündü, böylece bu çerçeve benzer şeyleri aynı şekilde ele almak isteyen herkes tarafından kullanılabilir. Verileri kullanan kişiler, sh dosyalarını tekrar tekrar yazmak için çok fazla zamandan da kaçınırlar.

Bu fikirlere dayanarak, yavaş yavaş bir çerçeve geliştirildi.

çerçeve , Layman'ın terimleriyle, koymak Benzer süreç nın-nin Aynı özellikler Çıkarın.

4. Gerçek mücadele

4.1 Birincisi hurdalı kurmak

hurda pip yüklemek

Six-1.4.1'i Kaldırma mesajı görüntülenirse

Ardından komutu şu şekilde değiştirin:

sudo pip install Scrapy --upgrade --ignore yüklü altı

Pip aslında python için bir paket yönetim aracıdır.Çoğu zaman python'u indirdiğinizde manuel olarak yüklersiniz. Pip Unix / linux, OS X ve Windows platformlarında çalışabilir.Python'da ihtiyaç duyulan modülleri ve modülleri pip aracılığıyla indirebilirsiniz. paketi.

  • Scrapy'nin başarıyla yüklenip yüklenmediğini onaylayın

hurda versiyonu

Başarılı kurulumun görüntüsü şu şekilde görünmelidir:

  • Mac'teki yaygın sorun, "dinamik modülde tanımlanmış bir başlatma işlevi yoktur"

ImportError: dinamik modül, init işlevini tanımlamıyor (init_openssl)

Çözüm:

Bu sorunun en olası nedeni, python'un 32bit olması ve bilgisayarın 64bit olmasıdır.

Python sürümü ve bilgisayarın işletim sistemi bitliği nasıl kontrol edilir?

uname -a

Bilgisayar işletim sistemi hakkında bilgi alabilir

ithalat platformu

platform.architecture ()

Python'un güncel sürümünü öğrenebilirsiniz, bir örnek aşağıdaki gibidir:

Burada bir blog önerin "OSX'te Scrapy Kurulumu" (

4.2 Projeyi kurma ve pycharm ve pycharm konfigürasyonunu indirme

Douban kitap listesinin bağlantısı olan "Douban 9 puan kitap listesini taramanın" klasik örneği: https://www.douban.com/doulist/1264675/

4.2.1 Projenin kurulması

Önce terminale komutu girin:

hurda başlangıç projesi kitabı

Başarıyla kurulursa, görünecektir:

Şablon dizini '/ Library / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / site-packages / scrapy / templates / project' kullanılarak yeni Scrapy proje 'kitabı', şurada oluşturuldu:

/ Kullanıcılar / wuxinyao / Masaüstü / kitap

İlk örümceğinize şu şekilde başlayabilirsiniz:

cd kitap

scrapy genspider example.com

Şu anda, oluşturulan dizine döndüğünüzde kitap adlı bir dizinin oluşturulduğunu görebilirsiniz Dizine girdikten sonra, örnekte douban adlı ana tarayıcı python dosyasını oluşturmak için komut satırını kullanın. talimat:

scrapy genspider douban https://www.douban.com/doulist/1264675/

Yukarıdaki URL, tarayıcı tarafından hedeflenen URL'dir

Başarılı olduktan sonra, aşağıdaki kod görüntülenecektir:

Modülde 'template'basic' kullanılarak spider'douban oluşturuldu:

book.spiders.douban

4.2.2 Bir sonraki adım için pycharm kullanın

Pycharm'ın URL'sini indirin:

  • Ana dosyayı oluşturun

Main.py, kitabın ana dizininde oluşturulmalıdır; bu, main.py ve otomatik olarak oluşturulan scrapy.cfg'nin aynı düzeyde olduğu anlamına gelir.

Main.py'ye girin:

hurda ithal cmdline'dan

cmdline.execute ("scrapy crawl douban" .split ())

  • Douban.py'yi değiştirin

Örümcekler dizininde douban.py'yi bulun, #allowed_domains = için açıklama yazın ve işlevi aşağıdaki şekilde değiştirin:

def ayrıştırma (öz, yanıt):

print response.body

  • a ekle < baş >

Setting.py'ye ekleyin:

USER_AGENT = 'Mozilla / 5.0 (Windows NT 6.3; WOW64; rv: 45.0) Gecko / 20100101 Firefox / 45.0'

4.2.3 SSS: İndirilen hurda paket içe aktarılamaz

çözümlenmemiş referans "hurda"

Ve pycharm'ın izin sorunları nedeniyle, scrapy doğrudan IDE'den indirilemeyebilir. Böylece hataları tekrar tekrar bildirecektir. Bu sorunun birkaç çözümü var:

  • IDE'de scrapy'yi indirmeyi tekrar deneyin

dosya -- > Varsayılan ayarları -- > Proje Tercümanı

Bir yorumlayıcı sürümü seçin, sol alt köşedeki artı işaretine tıklayın, yeni açılır arayüzde hurdalı arayın ve indirmek için kur'a tıklayın.

Proje yorumlayıcı, yorumlayıcı anlamına gelir.Mac bilgisayarlar python ile birlikte gelir, ancak birçok kişi yeni bir python indirmeyi seçer (örneğin, işletim sisteminin bit sayısı 32-bit'ten 64-bit'e değiştirilmek ister) ve farklı bir yerde saklanır. yol. Dahası, yeni paketler piyasaya sürüldüğünde, mac ile birlikte gelen python izin sorunlarına meyillidir, bu nedenle mac kullanıcıları genellikle birden fazla python yorumlayıcısına sahiptir.

Bu arayüzde kullanmak istediğiniz tercümanı seçebilirsiniz:

Bu, sorunu çözmeyebilir.İzin nedenleri gibi indirme başarısızlığının birçok nedeni vardır veya hurda indirme için gereken belirli bir paketin sürümü yeterince yeni değildir. Terminalde çalışmaya eşdeğerdir: pip install scrapy komutu.

İndirme başarılı olsa bile başarılı olmayabilir. Ancak bu nispeten en basit çözümdür, deneyebilirsiniz.

  • Yolu yeniden düzenleyin

Çalıştırmak - > Yapılandırmayı Düzenle

Main.py'nin mutlak yolunu betiğe yazın ve python yorumlayıcısında kullanmak istediğiniz yorumlayıcının sürümünü seçin.

Eğer hurdalığınız terminalde çalışabiliyorsa, hurdalığın yerini bulmak için hangi hurdalıyı kullanabilir ve ardından benzer yola sahip python sürümünü seçebilirsiniz. Veya çalışan python'un mutlak yolunu bulmak için hangi python'u kullanın ve bu sürümün yorumlayıcısını seçin.

Başarılı uygulamanın çıktısı:

İlk birkaç satır, web sitesinin kaynak kodunu kaldırmaya eşdeğer olan buna benzer. Pratik tarayıcısı, web sitesinin kaynak kodunu kontrol etti ve aynı sonucu gösterdi.

4.3 Başlık adını ve yazar adını çıkarın

Önce web sitesinin kaynak kodunu inceleyin:

İçinde bulunan < div sınıfı = "bd doulist-konu" > Aşağıda istediğimiz her kitabın tanıtımı var

Orijinal yazarın yazısına bakın, çıkarma sırası aşağıdaki gibidir:

  • Büyük çerçeveyi çıkarın: < div sınıfı = "bd doulist-konu" >

  • Başlığı çıkarın: 'div / a / text ()'

  • Çıkarma: ' < div class = "soyut" > (. *?) < br '

  • Puanı çıkarın: 'div / span / text ()'

Orijinal yazar voidsky_, böyle bir kod parçası sağladı (Douban aracılığıyla) çok ilginç:

selector = scrapy.Selector (yanıt)

kitaplar = selector.xpath ('// div')

kitaplarda her biri için:

title = each.xpath ('div / a / text ()'). ayıklamak ()

rate = each.xpath ('div / span / text ()'). extract ()

yazar = re.search (' < div > (. *?) < br ', each.extract (), re.S) .group (1)

print'Title: '+ başlık

print'rating: '+ oran

baskı yazarı

Yazdır''

Referans kaynağı: "Scrapy Installation and Really Quick Start-Crawling Douban 9 Point List"

Eser sahibi: voidsky_ very ilginç children

Bağlantı:

Bu kod, XML belgelerinde bilgi bulmak için bir dil olan xpath'i kullanır, ancak HTML'de de kullanılabilir. Çoğu etiketin içeriğini elde etmek için karmaşık düzenli ifadeler yazmanıza gerek yoktur, xpath'i doğrudan kullanabilirsiniz. Aşağıdaki tablo yaygın olarak kullanılan ifadeleri listeler:

Bu kod, önceki douban.py'de parse (self, response) işlevinin altına eklenir, önceki "print response.body" ifadesini yorumlayın ve bunu doğrudan ekleyin.

4.4 hurda süreç analizi

Aslında, bu noktada tam bir küçük program oluşturulmuştur ve çıktı şöyle olmalıdır:

Ancak, programın ilk kez böyle bir sonuç alamaması ve çeşitli hataların meydana gelmesi çok olasıdır, ancak hata ayıklama sırasında, hurdalığın yapısını anlamaya yardımcı olacak bazı şeyler görebilirsiniz:

2017-07-20 xx: 50: 53 BİLGİ: Etkin uzantılar:

...

2017-07-2020:50:53 BİLGİ: Etkin indirme ara yazılımları

...

2017-07-2020:50:53 BİLGİ: Etkin örümcek yazılımları:

...

2017-07-2020:50:53 BİLGİ: Etkinleştirilmiş öğe ardışık düzenleri:

...

2017-07-2020:50:53 BİLGİ: Örümcek açıldı

...

2017-07-2020:50:54 BİLGİ: Örümcek kapandı (bitti)

...

olası sorunlar:

Yukarıdaki çıktı sonucunu alamazsanız, varsa, biten koda daha yakından bakın:

UnicodeDecodeError: 'ascii' codec bileşeni, 0 konumundaki bayt 0xe6'nın kodunu çözemiyor: ordinal aralıkta değil (128)

Python'un str varsayılan değerlerinin ascii kodlamasına olduğunu açıklayın, bu da unicode kodlamayla çakışır, bu nedenle bu başlık hatası raporlanacaktır

Main.py'yi eklemeniz yeterlidir:

ithalat sys

yeniden yükle (sys)

sys.setdefaultencoding ('utf8')

Sorunu çözebilir.

4.5 Küçük projelerin zorluğunu artırmak

Yukarıdaki küçük projeye daha yakından bakın. Ne öğe ne de ardışık düzen dahil değildir, ancak veriler depolama işlemi olmadan taranır. Hurdalığın yapısal özellikleri tam olarak yansıtılmaz. Aşağıda başka bir klasik küçük proje kullanılacaktır. Hurdalığın yapısı ve işlevi hakkında daha fazla açıklama.

4.5.1 İlk adımda oluşturulan dizin alt dizinlerinin açıklaması:

komutu girin:

hurda başlangıç projesi myproject

Benim projem

  • scrapy.cfg: proje yapılandırma dosyası

  • /: proje python modülü, kodu buraya ekleyeceksiniz

  • myproject / items.py: proje öğeleri dosyası

  • myproject / pipelines.py: proje ardışık düzen dosyası

  • myproject / settings.py: proje yapılandırma dosyası

  • myproject / spiders: Örümceklerin yerleştirildiği dizin

4.5.2 Öğe python'da bir sözlük gibidir

Önceki içerikten de görebileceğiniz gibi, Öğe veri yüklemek için bir konteynerdir ve siteden yakalanan verileri elde etmek için Öğe'yi modellememiz gerekir.

Yazma yöntemi, madde yorumunda hurda olarak belirtilmiş ve son olarak, yakalanan verilerin depolanmasını gerçekleştirebilen kendi kendine yapılan python dosyasına (Örnek 1'deki douban.py gibi) yazılmıştır.

Kendi kendine oluşturulan python dosyasında (bu örnekte project.py olarak adlandırılır), önce öğenin işlevinin içe aktarılması gerekir.

project.py adresinden MyprojectItem içe aktarın

4.5.3 Ayarda Besleme çıkışının değişken ayarı

Öğe yakalanan verileri kaydettikten sonra, bunu bir excel sayfası olarak yazdırmak istiyorsanız, bunu settingsig.py'de ayarlamanız ve aşağıdaki iki satırı eklemeniz gerekir:

FEED_FORMAT: çıktı biçimini gösterir, csv / xml / json /

FEED_URI: Yerel veya FTP sunucusu olabilen çıktı konumunu belirtir

Örneğin:

FEED_URI = u'file: /// G: //dou.csv '

FEED_FORMAT = "CSV"

Bu durumda, çıktı dosyası bir csv dosyası olan dou.csv adlı G sürücüsünde saklanır.

5. Hurda inşaat projesi hakkında geri bildirim

5.1 Böcekleri daha hızlı bulma

Bir acemi için, tarayıcı programları yazmak için hurda kullanmayı öğrenen bir kişi için, zorluk daha çok pycharm'ın konfigürasyonunda ve normal ifadelere uyarlanmasında yatmaktadır.Bu projenin tamamlanması birçok mantıksal bölüme bölünmüşse, önce hurda bilgi akışını anlamanız daha önerilir. Ve bu şekilde veri akışı, programda hatalar bitse bile (olasılık çok yüksek), sorunun hangi dosyada olduğunu hızlı bir şekilde anlayabilirsiniz. Scrapy'nin konsolu hataları ayıklamak için pek uygun değildir, doğrudan anahtar hatasını göstermez, bu nedenle yukarıdaki işlevsel bölümleri zihninizde ayırt etmek ve buna göre hataları aramak en iyisidir.

5.2 Bir arada bulunma yorumlayıcısının neden olabileceği çeşitli hatalar

Bu makalenin temel amacı, hurda çerçevenin kullanımını tanıtmaktır. Ayrıca, bilgisayarda birden fazla python yorumlayıcısı olduğunda meydana gelebilecek çeşitli hatalar da dahil olmak üzere, bir tarayıcı programını tamamlarken karşılaşılabilecek çeşitli sorunlara odaklanır. Yazar, sonuca varıyor. : Paketi içe aktarırken hataları raporlamaya devam ederseniz, run / configuration'da python yorumlayıcısını değiştirin; konsolda hataları bildirmeye devam ederseniz, konsola bağlanamaz, ardından projeyi yeniden oluşturup usr / bin dizinindeki harici kitaplığı seçemezsiniz.

6. Bilgi Eki

6.1 Spider'da sınıflar ve yöntemler

  • ad: Gerekli ve benzersiz örümcek adı, dizeyi yazın, örümceği çalıştırırken girin

  • allow_domains: İzin verilen yöntem etki alanı adı, dize veya liste olabilir, isteğe bağlı olabilir, gerekli değildir.

  • start_urls: Önce ziyaret edilecek url'yi belirtin

  • start_requests (): Varsayılan olarak start_urls'den URL'leri alın ve her URL için bir istek oluşturun. Varsayılan geri çağırma ayrıştırmadır. Programlama buradan başlar. Bu, genellikle girişi simüle etmek ve dinamik kod elde etmek için kullanılan, belirtilen url'den erişimi başlatmak için yeniden yazılabilir. Dinamik kodu almak için şunu yapabilirsiniz:

scrapy.http import Request, FromRequest'ten

start_requests ():

return # Çerezleri almak için metaya katıl

Buradaki url, oturum açtığınız giriş URL'sidir. Bu url'yi ziyaret ettiğinizde, sunucu size bir sonraki girişte gönderilecek kodu içeren bir yanıt verecektir. Daha sonra, buradaki oturum açma yöntemine geri aramanın işlevi, kodu normal ifadeler yoluyla veya xpath ile birleştirerek döndürülen yanıttan almaktır.

Start_request'te, Downloader tarafından indirilen yanıt, tanımladığım oturum açma yöntemi olan geri aramaya döndürülür. Oturum açma yönteminde, dinamik kodu ayrıştırmaya ve elde etmeye ek olarak, simüle edilmiş bir oturum açma da gerçekleştirebilirsiniz. Oturum açmaya ekleyebilirsiniz:

def login (self, response):

code = response.xpath ('// h1 / text ()'). extract () # Sadece kodu almak için, aynı zamanda re ile de çıkarılabilir

headers = {} # Tarayıcı girişini simüle eden başlık

postdata = {} #server, yukarıda elde edilen kod dahil olmak üzere gönderi verilerinizi istiyor

dönüş

# Postdata'nın burada urlencode kullanmadığını ve kullanılan tanımlama bilgisinin, yukarıdaki start_requests'e kaydedilen tanımlama bilgisi olan döndürülen yanıttaki tanımlama bilgisi olduğunu unutmayın. Ek olarak, şu andaki url, gerçek gönderi verilerinizin url'sidir ve genellikle firebug aracılığıyla elde edilebilir. Aslında, çerezi şu anda da alabilirsiniz, böylece çerezi giriş yaptıktan sonra alabilirsiniz. Bu yöntem çağrıldıktan sonra, oturum açma başarılı olur, ardından oturum açtıktan sonra diğer sayfalara erişmek için günlüğe kaydedilen yöntemde aşağıdaki make_requests_from_url yöntemini kullanabilirsiniz.

# Burada, doğrulama kodunu girmeniz gerekirse, resmi indirip manuel olarak girebilirsiniz, bu başka bir kayıtta görülebilir.

Bu yöntem geçersiz kılınırsa, başlangıç_url'lerindeki url'ye önce erişilmez ve daha sonra erişmek istediğinizde özel "vurgu" gereklidir. Daha sonra açıklayacağım.

Ayrıca start_requests'in yalnızca bir kez otomatik olarak çağrıldığını unutmayın.

make_requests_from_url (url):

Bu yöntem, url'yi belirttiğinizde, bu yöntemle otomatik olarak ayrıştırmaya dönebilirsiniz. Scrapy içinde ayrıştırmayı otomatik olarak çağırabilen yalnızca iki yöntem vardır (start_requests ve make_requests_from_url). Bunun önemli olmasının nedeni, kuralı daha sonra bahsedilen CrawlSpider'da birleştirmektir.

Url'ye make_requests_from_url () aracılığıyla start_urls üzerinden erişebilirsiniz:

def günlüğe kaydedildi (öz, yanıt):

başlangıç_url'lerinde url için:

make_requests_from_url (url) verim

ayrıştır ():

Scrapy'de yanıtın iletildiği varsayılan yer parse () 'dir, adından da anlaşılacağı gibi web içeriği çıkarmak için kullanılır.Spider sınıfında web içeriği çıkarma burada uygulanabilir, ancak CralwSpider'da parse () kuraldan elde edilir Daha fazla işlem için bağlantı, bu nedenle CrawlSpider'da ayrıştırma yöntemini yeniden yazmanız önerilmez.

kural():

Kural, Downloader'a bağlantıyı elde etmesi için nasıl rehberlik edileceğini gösterir. Spesifik uygulama şudur:

scrapy.linkextractors'dan LinkExtractor'ı LKE olarak içe aktarın

Alıntı: ChrisPop

Bağlantı:

Sonuç: Yeni bir yöntem seçmek başlangıçta her zaman zordur ve yeni bir yazılıma uyum sağlamak da hatalarla doludur.İlk aşamayı tamamladığınız sürece, daha sonra açık ve rahat olacaksınız. Ayrıca herkesin hurda aracılığıyla daha ilginç ve eğlenceli tarayıcı uygulamaları yapmasını diliyorum!

Wu Xinyao , Şu anda Çin Ziraat Üniversitesi tarım bilimlerinde okuyan, biyoloji, bilgisayar ve istatistiklerin kesişme noktasına odaklanan veri grubu tarayıcı grubunun bir üyesi ve yakında biyostastik alanında daha fazla çalışma için Amerika Birleşik Devletleri'ne gidecek.

"Doctor Who" Noel Özelinde en tuhaf 15 an
önceki
20'den fazla suçlu müfettişi ortaya çıkarmak için üç uyarı atasözü kullandı.
Sonraki
Özel | E-sporları dijitalleştirme: League of Legends finalleri de buna güveniyor!
Bir gecede aşk! 20 yaşındaki İsviçreli güzel, Neymar ile unutulmaz bir akşam yaşıyor!
Tsinghua Didi: Travel Data Insights Çin Kentsel Alan Geliştirme Raporu!
Baby Groot'un sevimli satış yapmasına izin vermek için Marvel zaman çizelgesini değiştirdi!
Chao Technology | "Blue Arrow Aerospace" 80 tonluk motor gaz jeneratörü ilk tur ateşleme testi başarısı
Partiye sonsuza dek kalbinin başlangıcını hatırlatan Zigong Şehri İki Yeni Organizasyon Reformun ve Açılışın 40. Yıldönümünü Anıyor
Isınma maçı - Rashford 2 gol, Mareşal Hitalian Fellaini, Manchester United'ı 5-2 Galaxy gol attı
Özel | Başarılı girişimciler için 9 ipucu: programlama becerileri? Aslında o kadar önemli değil!
Einstein haklıysa, Noel Baba düşündüğümüzden daha şişman olabilir
Özel Karmaşık ağları (uygulamalar, modeller ve araştırma geçmişi) anlamak için bir makale
Resimli Wuhan | Double Eleven, çevrimdışı işletmeler ezici bir çoğunlukla popüler
Münhasır Sonraki öneri sisteminin bilgi sistemini anlamak için bir makale (değerlendirme, gerçek mücadele, öğrenme materyalleri)
To Top