国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Scrapy 實(shí)戰(zhàn)之爬取妹子圖

Achilles / 2605人閱讀

摘要:很多人學(xué)習(xí)爬蟲(chóng)的第一驅(qū)動(dòng)力就是爬取各大網(wǎng)站的妹子圖片,比如比較有名的。最后我們只需要運(yùn)行程序,即可執(zhí)行爬取,程序運(yùn)行命名如下完整代碼我已上傳到微信公眾號(hào)后臺(tái),在癡海公眾號(hào)后臺(tái)回復(fù)即可獲取。本文首發(fā)于公眾號(hào)癡海,后臺(tái)回復(fù)即可獲取最新編程資源。

閱讀文本大概需要 10 分鐘。

很多人說(shuō)爬蟲(chóng)這門技術(shù)非常有趣,但不知道如何入門。其實(shí)爬蟲(chóng)入門非常簡(jiǎn)單,難的部分在于各大網(wǎng)站的反爬機(jī)制。當(dāng)然對(duì)于一些簡(jiǎn)單的網(wǎng)站,還是非常容易爬取。

學(xué)習(xí)爬蟲(chóng)首先要明確你的驅(qū)動(dòng)力,是想爬一些知乎的數(shù)據(jù),還是一些電影的資源。驅(qū)動(dòng)力非常重要,這決定你是否有足夠的興趣繼續(xù)學(xué)下去。

很多人學(xué)習(xí)爬蟲(chóng)的第一驅(qū)動(dòng)力就是爬取各大網(wǎng)站的妹子圖片,比如比較有名的 mzitu。在爬這些網(wǎng)站的時(shí)候,即可以欣賞漂亮的妹子圖,又能學(xué)習(xí)到技術(shù),非常的 nice。

今天我就結(jié)合非常好用的 scrapy 框架,去抓取一些妹子圖片,并把爬取的數(shù)據(jù)保存到 mongodb 數(shù)據(jù)庫(kù)中。本次要爬取的網(wǎng)站是 360 的圖片搜索網(wǎng)站,

地址:http://images.so.com/

360 圖片的妹子質(zhì)量還是非常可以的,我隨意放幾張大家感受下。

清純可愛(ài)的

文藝又氣質(zhì)的

仙氣十足的

非常的賞心悅目。

程序思路

本次程序運(yùn)行的環(huán)境是 windows 10 + python 3.6,運(yùn)行本次程序前首先確保你已經(jīng)安裝好了 scrapy、pymongo 以及 mongodb 數(shù)據(jù)庫(kù)。

簡(jiǎn)單的分析了下 360 圖片網(wǎng)站,并沒(méi)有很強(qiáng)的反爬措施,并且網(wǎng)站的數(shù)據(jù)是以 Ajax 請(qǐng)求呈現(xiàn)。

我們進(jìn)一步查看請(qǐng)求的詳情,觀察返回的數(shù)據(jù)結(jié)構(gòu)。

返回的是 JSON 數(shù)據(jù)格式,其中 list 字段把圖片的一些信息都保存在這里面。比如我們需要的圖片地址信息 cover_imgurl。另外觀察 Ajax 請(qǐng)求的參數(shù)信息,還有一個(gè) sn 一直在變化,這個(gè)參數(shù)很明顯就是偏移量。當(dāng) sn? 為 30 時(shí),返回的是前 30 張圖片,依次類推,我們只需要改變 sn 的值就可以一直獲取圖片的信息。

接下來(lái)我們只需要通過(guò)?scrapy 高性能的框架,把網(wǎng)站上的圖片保存到本地即可。

新建項(xiàng)目

首先在本地創(chuàng)建一個(gè) scrapy 項(xiàng)目并命名為 images360。通過(guò)已下的命名即可創(chuàng)建。

</>復(fù)制代碼

  1. scrapy?startproject?images360

隨后就會(huì)有如下的項(xiàng)目結(jié)構(gòu)

接下來(lái)就是在 spiders 目錄下新建一個(gè) Spider,命令如下:

</>復(fù)制代碼

  1. scrapy?genspider?images?images.so.com

這樣我們的項(xiàng)目都已創(chuàng)建好,最后項(xiàng)目的結(jié)構(gòu)如下。

程序代碼

settings.py

在 settings.py 里面會(huì)先定義一個(gè)變量 MAX_PAGE,表示我們需要爬取的最大頁(yè)面,比如在此次的程序中我們?cè)O(shè)置的是 50,也就是爬取 50 頁(yè),每頁(yè) 30 張,一共 1500 張圖片。

</>復(fù)制代碼

  1. MAX_PAGE?=?50

settings.py 文件中我們還設(shè)置一些數(shù)據(jù)庫(kù)相關(guān)的配置信息。

</>復(fù)制代碼

  1. MONGO_URI?=?"localhost"
  2. MONGO_DB?=?"test"
  3. IMAGES_STORE?=?"./images"

并且需要注意的是我們要修改 settings.py 中的 ROBOTSTXT_OBEY 變量,將其設(shè)置為 False,否則無(wú)法抓取。

</>復(fù)制代碼

  1. ROBOTSTXT_OBEY?=?False

start_requests()

這個(gè)函數(shù)用來(lái)構(gòu)造最開(kāi)始的請(qǐng)求,用來(lái)生成 50 次請(qǐng)求。

</>復(fù)制代碼

  1. ????def?start_requests(self):
  2. ????????data?=?{"ch":?"photogtaphy",?"listtype":?"new"}
  3. ????????base_url?=?"https://image.so.com/zj?0"
  4. ????????for?page?in?range(1,?self.settings.get("MAX_PAGE")?+?1):
  5. ????????????data["sn"]?=?page?*?30
  6. ????????????params?=?urlencode(data)
  7. ????????????url?=?base_url?+?params
  8. ????????????yield?Request(url,?self.parse

提取信息

我們會(huì)在 items.py 文件中定義一個(gè) Images360Item 類,用來(lái)定義我們的數(shù)據(jù)結(jié)構(gòu)。

</>復(fù)制代碼

  1. class?Images360Item(Item):
  2. ????#?define?the?fields?for?your?item?here?like:
  3. ????#?name?=?scrapy.Field()
  4. ????collection?=?table?=?"images"
  5. ????id?=?Field()
  6. ????url?=?Field()
  7. ????title?=?Field()
  8. ????thumb?=?Field()

其中包括圖片的 ID、鏈接、標(biāo)題、縮略圖。另外還有兩個(gè)屬性 collection 和 table,都定義為 images 字符串,代表 MongoDB 存儲(chǔ)的 Collection 名稱。

接下來(lái)我們提取 Spider 里有關(guān)信息,在 parse() 方法改寫成如下所示:

</>復(fù)制代碼

  1. ????def?parse(self,?response):
  2. ????????result?=?json.loads(response.text)
  3. ????????for?image?in?result.get("list"):
  4. ????????????item?=?Images360Item()
  5. ????????????item["id"]?=?image.get("imageid")
  6. ????????????item["url"]?=?image.get("qhimg_url")
  7. ????????????item["title"]?=?image.get("group_title")
  8. ????????????item["thumb"]?=?image.get("qhimg_thumb_url")
  9. ????????????yield?item

這樣我們就完成了信息的提取,接下來(lái)就需要把抓取的信息保存到 MongoDB 中。

MongoDB

首先確保你本地已經(jīng)安裝好了 MongoDB,并且已經(jīng)正常啟動(dòng)。我們用一個(gè) MongoPipeline 將信息保存到 MongoDB 中,在 pipelines.py 里添加如下類的實(shí)現(xiàn):

</>復(fù)制代碼

  1. class?MongoPipeline(object):
  2. ????def?__init__(self,?mongo_uri,?mongo_db):
  3. ????????self.mongo_uri?=?mongo_uri
  4. ????????self.mongo_db?=?mongo_db
  5. ????@classmethod
  6. ????def?from_crawler(cls,?crawler):
  7. ????????return?cls(
  8. ????????????mongo_uri=crawler.settings.get("MONGO_URI"),
  9. ????????????mongo_db=crawler.settings.get("MONGO_DB")
  10. ????????)
  11. ????def?open_spider(self,?spider):
  12. ????????self.client?=?pymongo.MongoClient(self.mongo_uri)
  13. ????????self.db?=?self.client[self.mongo_db]
  14. ????def?process_item(self,?item,?spider):
  15. ????????self.db[item.collection].insert(dict(item))
  16. ????????return?item
  17. ????def?close_spider(self,?spider):
  18. ????????self.client.close()

Scrapy 提供了專門處理下載的 Pipeline,包括文件下載和圖片下載。下載文件和圖片的原理與抓取頁(yè)面的原理一樣,因此下載過(guò)程支持異步和多線程,下載十分高效。

我們首先在 settings.py 定義一個(gè) IMAGES_STORE 變量,用來(lái)表示圖片存儲(chǔ)的路徑。

</>復(fù)制代碼

  1. IMAGES_STORE?=?"./images"

內(nèi)置的 ImagesPipeline 會(huì)默認(rèn)讀取 Item 的 image_urls 字段,并認(rèn)為該字段是一個(gè)列表形式,它會(huì)遍歷 Item 的 image_urls 字段,然后取出每個(gè) URL 進(jìn)行圖片下載。

但是現(xiàn)在生成的 Item 的圖片鏈接字段并不是 image_urls 字符表示的,也不是列表形式,而是單個(gè)的 URL。所以為了實(shí)現(xiàn)下載,我們需要重新定義下載的部分邏輯,即要自定義 ImagePipeline,繼承內(nèi)置的 ImagesPipeline,從而實(shí)現(xiàn)我們自己的圖片下載邏輯。

</>復(fù)制代碼

  1. class?ImagePipeline(ImagesPipeline):
  2. ????def?file_path(self,?request,?response=None,?info=None):
  3. ????????url?=?request.url
  4. ????????file_name?=?url.split("/")[-1]
  5. ????????return?file_name
  6. ????def?item_completed(self,?results,?item,?info):
  7. ????????image_paths?=?[x["path"]?for?ok,?x?in?results?if?ok]
  8. ????????if?not?image_paths:
  9. ????????????raise?DropItem("Image?Downloaded?Failed")
  10. ????????return?item
  11. ????def?get_media_requests(self,?item,?info):
  12. ????????yield?Request(item["url"])

最后我們需要在 settings.py 中把我們定義好的 Item Pipeline 打開(kāi),修改 settings.py 中的 ITEM_PIPELINES 即可。

</>復(fù)制代碼

  1. ITEM_PIPELINES?=?{
  2. ???"images360.pipelines.ImagePipeline":?300,
  3. ???"images360.pipelines.MongoPipeline":?301
  4. }

最后我們只需要運(yùn)行程序,即可執(zhí)行爬取,程序運(yùn)行命名如下:

</>復(fù)制代碼

  1. scrapy?crawl?images

完整代碼我已上傳到微信公眾號(hào)后臺(tái),在「癡海」公眾號(hào)后臺(tái)回復(fù)「360」即可獲取。

本文首發(fā)于公眾號(hào)「癡海」,后臺(tái)回復(fù)「1024」即可獲取最新編程資源。

比如這樣的:史上最全 Python 學(xué)習(xí)資料,PDF 電子書(shū)大合集

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44852.html

相關(guān)文章

  • 首次公開(kāi),整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

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

    Harriet666 評(píng)論0 收藏0
  • 零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • Python爬蟲(chóng) - scrapy - 爬取妹子 Lv2

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

    Backache 評(píng)論0 收藏0
  • scrapy簡(jiǎn)單學(xué)習(xí)5—片下載,爬取妹子

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

    JerryZou 評(píng)論0 收藏0
  • Python爬蟲(chóng) - scrapy - 爬取妹子 Lv1

    摘要:爬取妹子圖的實(shí)例打算分成三部分來(lái)寫,嘗試完善實(shí)用性。中的每一個(gè)子項(xiàng)都是一個(gè)標(biāo)簽。這個(gè)說(shuō)明的前提是不自定義當(dāng)爬蟲(chóng)完成的模型數(shù)據(jù)采集后,會(huì)自動(dòng)將發(fā)送給處理。 0. 前言 這是一個(gè)利用python scrapy框架爬取網(wǎng)站圖片的實(shí)例,本人也是在學(xué)習(xí)當(dāng)中,在這做個(gè)記錄,也希望能幫到需要的人。爬取妹子圖的實(shí)例打算分成三部分來(lái)寫,嘗試完善實(shí)用性。 系統(tǒng)環(huán)境 System Version:Ubunt...

    el09xccxy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<