2

ここで、このWeb ページの項目 (iphone) のすべての画像をスクレイピングしたいと考えています。まず、画像のすべてのリンクを抽出し、リクエストを 1 つずつ src に送信して、それらをフォルダー '/phone/' にダウンロードします。これが私のコードです:

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        print 'hi'
        self.crawl('https://s.taobao.com/search?q=iphone&imgfile=&ie=utf8', callback=self.index_page, fetch_type='js')

    #@config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        items = response.doc('.item').items()
        for item in items:
            imgurl = item('.J_ItemPic img').attr('.src')
            if imgurl:
                filename = item('.J_ItemPic.img').attr('.id')
                self.crawl(imgurl, callback=self.scrape_photo, save={'filename': filename})

    def save_photo(self, content, filename):
        with open('phone/'+filename, 'wb') as f:
            f.write(content)

    def scrape_photo(self, response):
        content = response.content
        filename = response.save['filename']+'.jpg'
        self.save_photo(content, filename)

それは非常に直感的でシンプルです。しかし、コードを実行しても何も起こらず、ターミナルに次のログ メッセージが表示されました。

[I 160602 18:57:42 scheduler:664] restart task sk:on_start data:,on_start
[I 160602 18:57:42 scheduler:771] select sk:on_start data:,on_start
[I 160602 18:57:42 tornado_fetcher:178] [200] sk:on_start data:,on_start 0s
[I 160602 18:57:42 processor:199] process sk:on_start data:,on_start -> [200] len:8 -> result:None fol:1 msg:0 err:None
[I 160602 18:57:42 scheduler:712] task done sk:on_start data:,on_start

私はこの問題にほとんど夢中です。何が問題なのか、どうすれば修正できるのか教えてください。前もって感謝します!

4

1 に答える 1

1

リンク「 https://s.taobao.com/search?q=iphone&imgfile=&ie=utf8 」をクロールしたことはありますか?

pyspider はデフォルトでクロールされたリンクを破棄します (コメント@config(age=10 * 24 * 60 * 60)は再クロールしないことを意味します)

hold プロジェクトを再開したい場合はhttp://docs.pyspider.org/en/latest/apis/self.crawl/#itagが役立ちます。

于 2016-06-02T18:16:28.883 に答える