成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python爬蟲 - scrapy - 爬取妹子圖 Lv1

el09xccxy / 1675人閱讀

摘要:爬取妹子圖的實例打算分成三部分來寫,嘗試完善實用性。中的每一個子項都是一個標(biāo)簽。這個說明的前提是不自定義當(dāng)爬蟲完成的模型數(shù)據(jù)采集后,會自動將發(fā)送給處理。

0. 前言

這是一個利用python scrapy框架爬取網(wǎng)站圖片的實例,本人也是在學(xué)習(xí)當(dāng)中,在這做個記錄,也希望能幫到需要的人。爬取妹子圖的實例打算分成三部分來寫,嘗試完善實用性。

系統(tǒng)環(huán)境

System Version:Ubuntu 16.04
Python Version:3.5.2
Scrapy Version:1.5.0

1. 建立Scrapy項目(略)

可參考《Python爬蟲 - scrapy - 爬取豆瓣電影TOP250》

我建立的項目名稱為:spider_meizitu

2. items文件
<項目目錄>/spider_meizitu/items.py
import scrapy

class SpiderMeizituItem(scrapy.Item):
    images = scrapy.Field()
    image_urls = scrapy.Field()
注意:這里的SpiderMeizituItem名字是可以改的,但是imagesimage_urls兩個變量名稱暫時不要改,原因后面說。
3. 爬蟲文件 3.1 完整文件
<項目目錄>/spider_meizitu/spiders/meizitu.py
from scrapy import Request
from scrapy.spiders import Spider
from spider_meizitu.items import SpiderMeizituItem

class MeizituSpider(Spider):
    #爬蟲名稱
    name = "meizitu"
    
    #開始的url
    start_urls = {
        "http://www.meizitu.com/a/sexy.html"
    }
    
    #處理函數(shù)
    def parse(self, response):
        meizi_titles = response.xpath("http://ul[@class="wp-list clearfix"]/li")
        for meizi_title in meizi_titles:
            meizi_url = meizi_title.xpath(".//h3[@class="tit"]/a/@href").extract()[0]
            yield Request(meizi_url,callback=self.parse_meizi_pic)

    #處理函數(shù)跳轉(zhuǎn)
    def parse_meizi_pic(self,response):
        item = SpiderMeizituItem()
        meizitu_pics = response.xpath("http://div[@id="picture"]/p/img")

        for meizitu_pic in meizitu_pics:
            item["images"] = meizitu_pic.xpath(".//@alt").extract()[0].split(",")[0]
            item["image_urls"] = meizitu_pic.xpath(".//@src").extract()
            yield item
3.2 詳細(xì)說明

name和start_urls就不說了,略過。

parse函數(shù)

首先看一下妹子圖網(wǎng)站的結(jié)構(gòu),打開我們的start_urls。
前端頁面:

再看源碼:

可以看到,所有的圖片項目是在一個

    標(biāo)簽下的
  • 標(biāo)簽。而每個圖片的鏈接打開后會進(jìn)入一個新的頁面,那里才是我們要下載的圖片。所以,第一步,要解析這些頁面鏈接,下面這段代碼建立了一個
  • 標(biāo)簽的集合。

    meizi_titles = response.xpath("http://ul[@class="wp-list clearfix"]/li")

    meizi_titles中的每一個子項都是一個

  • 標(biāo)簽。接下來在meizi_titles集合中做迭代循環(huán),繼續(xù)解析
  • 標(biāo)簽中的內(nèi)容。

    for meizi_title in meizi_titles:

    看下

  • 標(biāo)簽中的源碼:

    注意,第一個img連接中的limg.jpg只是縮略圖,并不是我們想要的內(nèi)容。

    標(biāo)簽中的連接才是后面的頁面,我們要把這個鏈接解析出來。

    meizi_url = meizi_title.xpath(".//h3[@class="tit"]/a/@href").extract()[0]

    解析完成后,我們要爬蟲請求新的頁面,那里才有我們需要的圖片:

    yield Request(meizi_url,callback=self.parse_meizi_pic)

    這里的callback參數(shù)將頁面請求結(jié)果發(fā)送給了當(dāng)前class下面的parse_meizi_pic函數(shù)。解析過程與前面的頁面大同小異,不細(xì)說了。

    唯一需要說明的是item["image_urls"]中存儲的變量必須是list類型的,如果不是,后期在pipeline處理時會報錯,無法解析url。(這個說明的前提是不自定義 ImagesPipeline

    當(dāng)爬蟲完成item的模型數(shù)據(jù)采集后,scrapy會自動將item發(fā)送給Pipeline處理。

    4. settings.py
    <項目目錄>/spider_meizitu/settings.py
    需要修改的項目
    ITEM_PIPELINES = {
        "scrapy.contrib.pipeline.images.ImagesPipeline": 1,
    }
    
    #圖片存儲路徑,根據(jù)自己的情況修改
    IMAGES_STORE = "/home/sftp_root/spider_meizitu/meizitu"
    
    #一些USER_AGENT
    USER_AGENT_LIST = [
        "zspider/0.9-dev http://feedback.redkolibri.com/",
        "Xaldon_WebSpider/2.0.b1",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0) AddSugarSpiderBot www.idealobserver.com",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)",
        "Mozilla/5.0 (compatible; Speedy Spider; http://www.entireweb.com/about/search_tech/speedy_spider/)",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
        "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
        "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/60.0.3112.113 Chrome/60.0.3112.113 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.11096.400",
        "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"
        "Nusearch Spider (www.nusearch.com)",
        "nuSearch Spider (compatible; MSIE 4.01; Windows NT)",
        "lmspider ([email protected])",
        "lmspider [email protected]",
        "hl_ftien_spider_v1.1",
        "hl_ftien_spider",
        "everyfeed-spider/2.0 (http://www.everyfeed.com)",
        "envolk[ITS]spider/1.6 (+http://www.envolk.com/envolkspider.html)",
        "envolk[ITS]spider/1.6 ( http://www.envolk.com/envolkspider.html)",
        "Baiduspider+(+http://www.baidu.com/search/spider_jp.html)",
        "Baiduspider+(+http://www.baidu.com/search/spider.htm)",
        "BaiDuSpider",    
        ]
    
    #隨機(jī)發(fā)送UserAgent
    DOWNLOADER_MIDDLEWARES = {
        "spider_meizitu.middlewares.RandomUserAgentMiddleware": 400,
    
    }
    
    #每次下載圖片的延遲時間
    DOWNLOAD_DELAY = 3
    特別需要說明的是ITEM_PIPELINES參數(shù)。如果你看過其他的下載圖片的爬蟲文章,應(yīng)該注意到我沒有寫自己的Pipeline。如果將ITEM_PIPELINES內(nèi)容指定為scrapy.contrib.pipeline.images.ImagesPipeline,那么在spider完成item采集后,Scrapy會自動開啟系統(tǒng)默認(rèn)的ImagesPipeline處理通道,這也是之前定義item的時候,imagesimage_urls兩個參數(shù)名稱不能更改的原因。具體內(nèi)容可參考官方文檔下載項目圖片章節(jié)
    5. middlewares.py
    <項目目錄>/spider_meizitu/middlewares.py
    from spider_meizitu.settings import USER_AGENT_LIST
    import random
    
    class RandomUserAgentMiddleware():
        def process_request(self, request, spider):
            ua  = random.choice(USER_AGENT_LIST)
            if ua:
                request.headers.setdefault("User-Agent", ua)

    在這個實例中,middlewares的唯一功能就是想web服務(wù)器發(fā)送隨機(jī)的USER_AGENT

    6. 執(zhí)行結(jié)果

    后續(xù)計劃 Lv2 爬取多頁面的妹子圖 Lv3 嘗試更改圖片文件名,并分目錄存儲

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41407.html

相關(guān)文章

  • Python爬蟲 - scrapy - 爬取妹子 Lv2

    摘要:前言這個文章是延續(xù)之前爬取妹子圖的延續(xù),之前的爬蟲可以爬取一個頁面的圖片,爬取一次大概張圖片的樣子,按照之前的計劃,本次要進(jìn)一步完善爬蟲,爬取妹子圖全網(wǎng)圖片。做完上述改動后,爬蟲運(yùn)行基本正常,但是爬取的速度有點(diǎn)慢,個小時大概爬取了張圖片。 0. 前言 這個文章是延續(xù)之前《爬取妹子圖 Lv1》的延續(xù),之前的爬蟲可以爬取一個頁面的圖片,爬取一次大概400張圖片的樣子,按照之前的計劃,本次要...

    Backache 評論0 收藏0
  • Scrapy 實戰(zhàn)之爬取妹子

    摘要:很多人學(xué)習(xí)爬蟲的第一驅(qū)動力就是爬取各大網(wǎng)站的妹子圖片,比如比較有名的。最后我們只需要運(yùn)行程序,即可執(zhí)行爬取,程序運(yùn)行命名如下完整代碼我已上傳到微信公眾號后臺,在癡海公眾號后臺回復(fù)即可獲取。本文首發(fā)于公眾號癡海,后臺回復(fù)即可獲取最新編程資源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 閱讀文本大概需要 1...

    Achilles 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • scrapy簡單學(xué)習(xí)5—片下載,爬取妹子

    摘要:學(xué)習(xí)網(wǎng)站爬蟲,整站爬取妹子圖定義爬取的內(nèi)容的編寫提供了一種便捷的方式填充抓取到的是頁面源代碼,載入每個連接,用屬性請求連接,返回請求獲取頁碼集合打印頁碼如果頁碼集合圖片連接讀取頁碼集合的倒數(shù)第二個頁碼圖片連接替換成空返回請求用載 學(xué)習(xí)網(wǎng)站:爬蟲,整站爬取妹子圖 1.item.py(定義爬取的內(nèi)容) import scrapy class MeizituItem(scrapy.Ite...

    JerryZou 評論0 收藏0
  • scrapy 實戰(zhàn)練習(xí)

    摘要:爬取百思不得姐首先一步一步來,我們先從爬最簡單的文本開始。將百思不得姐段子保存到中別忘了將管道加到配置文件中。雖然我只是簡單的爬了百思不得姐,不過這些方法可以應(yīng)用到其他方面,爬取更多更有用的數(shù)據(jù)。 前一篇文章介紹了很多關(guān)于scrapy的進(jìn)階知識,不過說歸說,只有在實際應(yīng)用中才能真正用到這些知識。所以這篇文章就來嘗試?yán)胹crapy爬取各種網(wǎng)站的數(shù)據(jù)。 爬取百思不得姐 首先一步一步來,我...

    betacat 評論0 收藏0

發(fā)表評論

0條評論

el09xccxy

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<