Բարև, ես աշխատում եմ GAN ցանցի վրա, որը ստեղծում է պատկերներ NES ոճով: Բայց նախ, ես պետք է պատրաստեմ տվյալների բազա: Ես գտա http://www.vgmuseum.com/ կայքը, որը պարունակում է բազմաթիվ նկարներ NES-ի համար (~10000): Այդ իսկ պատճառով ես ստեղծում եմ սցենար՝ այդ պատկերները ջնջելու համար: Սկսելու համար ես պետք է տեղադրեմ քերծվածք և բարձ:
pip install scrapy pip install pillow
Երբ scrapy-ը տեղադրվի՝ նախագիծ ստեղծելու համար:
scrapy.exe startproject vgmuseum cd vgmuseum scrapy genspider nes www.vgmuseum.com
Հրամանի կատարումից հետո կստեղծվի գրացուցակի կառուցվածքը:
Նախքան կոդի քերծվածքը գրելը պետք է կազմաձևել նկարները ներբեռնելու համար: Բացեք settings.py-ը և ավելացրեք IMAGES_STORE փոփոխականներ՝ ուղիով դեպի այն թղթապանակը, որտեղ ցանկանում եք պահել նկարները և միացնել ImagesPipeline՝ ավելացնելով կամ խմբագրելով ITEM_PIPELINES:
ITEM_PIPELINES = {"scrapy.pipelines.images.ImagesPipeline": 1} IMAGES_STORE = "images"
Այնուհետև բացեք items.py: Այստեղ ես կստեղծեմ երկու դաշտային պատկեր, իսկ image_url սա ֆայլ է, որտեղ ես կպահեմ պատկերների մասին տեղեկությունները: Դաշտը պետք է ունենա անունների պատկերներ և image_url: Սա պահանջվում է ImagesPipeline-ի կողմից, սակայն այն կարող է փոխվել settings.py-ում:
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class VgmuseumItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() images = scrapy.Field() image_urls = scrapy.Field()
Վերջապես, ես պատրաստ եմ ստեղծել spider open spider թղթապանակ և այնուհետև nes.py: Սկսեք ներմուծումից:
Ներմուծեք scrapy, scrapy հարցում և տարր VgmuseumItem դաս, որը ստեղծվել է տարրերի ֆայլում:
import scrapy from scrapy.http import Request from vgmuseum.items import VgmuseumItem
NesSpider դասի սկզբում ես պետք է նշեմ անունը, թույլատրված տիրույթները և սկզբնական URL-ները:
class NesSpider(scrapy.Spider): name = "nes" allowed_domains = ["www.vgmuseum.com"] start_urls = ["http://www.vgmuseum.com/nes_b.html"]
Այնուհետև ես պետք է ստեղծեմ վերլուծության մեթոդ: Երբ ես հաջորդ անգամ գործարկեմ spider-ը, այն կսկսվի վերլուծության մեթոդից: Վերլուծության մեթոդն ունի երկու արգումենտ ինքն ու պատասխան:
Այսպիսի տեսք ունի կայքը. Օգտագործելով XPath շարահյուսությունը, ես պետք է բեռնեմ բոլոր URL-ները այս էջից և այնուհետև ներբեռնեմ բոլոր պատկերները հատուկ url-ից: Բացի այդ, կա Վերադառնալ վերև, որը պետք է անտեսվի:
def parse(self, response): game_urls = response.xpath("//ol/li/a/@href").extract() for url in game_urls: if url != "#top": yield Request( response.urljoin(url), callback=self.parse_images )
game_urls պարունակում է էջի բոլոր url-ների ցանկը: Այնուհետև ես մի օղակ եմ բոլոր URL-ների միջով, զտում եմ բոլոր #վերևի URL-ները և կանչում եմ վերլուծության_պատկերների մեթոդը:
Սա խաղի էջի օրինակ է.
Այստեղ ես պետք է ստանամ պատկերի անուն և ձևավորեմ պատկերի URL: Այնուհետև ավելացրեք URL-ները ցուցակին և նշանակեք այս ցուցակը image_urls դաշտին VgmuseumItem դասից:
def parse_images(self, response): item = VgmuseumItem() image_urls = [] image_name = response.xpath("//center/img/@src").extract() for name in image_name: image_urls.append(f"{response.url.rsplit('/', 1)[0]}/{name}") item["image_urls"] = image_urls yield item
Ստեղծեք VgmuseumItem դասի օրինակ, ստացեք բոլոր պատկերների անունները էջից, ձևավորեք url և ավելացրեք image_urls ցուցակին: image_urls-ը VgmuseumItem-ից դաշտին տալով և վերադարձնել այն: Ահա և վերջ։ Հիմա ես պատրաստ եմ մահապատժի ենթարկել սարդին։ Համոզվեք, որ դուք գտնվում եք vgmuseum թղթապանակում և կատարեք:
scrapy crawl nes
Պատկերների թղթապանակը ավտոմատ կերպով կստեղծվի, և նկարները կսկսեն հայտնվել այնտեղ: Բացի այդ, լավ գաղափար է settings.py-ում ավելացնել DOWNLOAD_DELAY փոփոխական: Սա կարող է խանգարել ձեզ արգելք ստանալ կայքում:
Սկզբնապես հրապարակվել է https://makspostument.com-ում 2019 թվականի հուլիսի 2-ին: