Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für das Crawlen von Douban-Filmbildern

Beispiel für das Crawlen von Douban-Filmbildern

PHP中文网
PHP中文网Original
2017-06-20 15:26:401956Durchsuche

1. Holen Sie sich zuerst den Effekt

 

2. Installieren und verwenden Sie Scrapy

Offizielle Website:.

Installationsbefehl: pip install Scrapy

Installation abgeschlossen, verwenden Sie die Standard: Erstellen Sie ein neues Projekt aus der Vorlage, Befehl: scrapy startproject xx

 

Das Bild oben veranschaulicht anschaulich den Wirkmechanismus von Scrapy. Die spezifische Bedeutung und Funktion jedes Teils kann auf Baidu gefunden werden, daher werde ich hier nicht auf Details eingehen. Im Allgemeinen müssen wir die folgenden Schritte ausführen.

 1) Einstellungen konfigurieren Für andere Konfigurationen können Sie die Dokumentkonfiguration entsprechend Ihren eigenen Anforderungen anzeigen.

DEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.10 Safari/537.36'}
DOWNLOAD_TIMEOUT = 30IMAGES_STORE = 'Images'

 2) Definieren Sie die Artikelklasse, die der Modellklasse entspricht. Zum Beispiel:

class CnblogImageItem(scrapy.Item):
    image = scrapy.Field()
    imagePath = scrapy.Field()
    name = scrapy.Field()

 3) Konfigurieren Sie die Download-Middleware. Die Funktion der Download-Middleware besteht darin, das Senden einer Anfrage anzupassen. Im Allgemeinen gibt es Middleware für Verarbeitungsagenten, Middleware für PhantomJs usw. Hier verwenden wir ausschließlich Proxy-Middleware.

class GaoxiaoSpiderMiddleware(object):def process_request(self, request, spider):if len(request.flags) > 0 and request.flags[0] == 'img':return None
        driver = webdriver.PhantomJS()# 设置全屏        driver.maximize_window()
        driver.get(request.url)
        content = driver.page_source
        driver.quit()return HtmlResponse(request.url, encoding='utf-8', body=content)class ProxyMiddleWare(object):def process_request(self, request, spider):
        request.meta['proxy'] = 'http://175.155.24.103:808'

 4) Schreiben Sie eine Pipeline, die zum Verarbeiten von von Spider übergebenen Elementen, zum Speichern von Excel, in der Datenbank, zum Herunterladen von Bildern usw. verwendet wird. Hier ist mein Code zum Herunterladen von Bildern mit dem offiziellen Bild-Download-Framework.

class CnblogImagesPipeline(ImagesPipeline):
    IMAGES_STORE = get_project_settings().get("IMAGES_STORE")def get_media_requests(self, item, info):
        image_url = item['image']if image_url != '':yield scrapy.Request(str(image_url), flags=['img'])def item_completed(self, result, item, info):
        image_path = [x["path"] for ok, x in result if ok]if image_path:# 重命名if item['name'] != None and item['name'] != '':
                ext = os.path.splitext(image_path[0])[1]
                os.rename(self.IMAGES_STORE + '/' +  image_path[0], self.IMAGES_STORE + '/' + item['name'] + ext)
            item["imagePath"] = image_pathelse:
            item['imagePath'] = ''return item

 5) Schreiben Sie Ihre eigene Spider-Klasse. Die Rolle von Spider besteht darin, einige Informationen zu konfigurieren, URL-Anfragen zu initiieren und Antwortdaten zu verarbeiten. Die Download-Middleware-Konfiguration und -Pipeline kann hier in der Einstellungsdatei abgelegt werden. Hier habe ich sie in ihre eigenen Spider eingefügt. Da das Projekt mehrere Spider enthält und sie unterschiedliche Download-Middleware verwenden, werden sie separat konfiguriert.

# coding=utf-8import sysimport scrapyimport gaoxiao.itemsimport json
reload(sys)
sys.setdefaultencoding('utf-8')class doubanSpider(scrapy.Spider):
    name = 'douban'allowed_domains = ['movie.douban.com']
    baseUrl = ''start = 0
    start_urls = [baseUrl + str(start)]
    custom_settings = {'DOWNLOADER_MIDDLEWARES': {'gaoxiao.middlewares.ProxyMiddleWare': 1,#             'gaoxiao.middlewares.GaoxiaoSpiderMiddleware': 544        },'ITEM_PIPELINES': {'gaoxiao.pipelines.CnblogImagesPipeline': 1,
        }
    }def parse(self, response):
        data = json.loads(response.text)['subjects']for i in data:
            item = gaoxiao.items.CnblogImageItem()if i['cover'] != '':
                item['image'] = i['cover']
                item['name'] = i['title']else:
                item['image'] = ''yield itemif self.start < 400:
            self.start += 20yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)

Das obige ist der detaillierte Inhalt vonBeispiel für das Crawlen von Douban-Filmbildern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn