Heim >Backend-Entwicklung >Python-Tutorial >Beispiel für das Crawlen von Douban-Filmbildern
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!