快上車,scrapy爬蟲飆車找福利(一)

以前也有寫過爬蟲,抓過網(wǎng)易云歌單和豆瓣讀書的數(shù)據(jù),當(dāng)時有兩個問題解決的不夠好, 自動化和登錄。最近花時間用scrapy去寫,自認(rèn)為更好的解決了上述問題。這篇文章當(dāng)作一個記錄,也可當(dāng)作學(xué)習(xí)教程(需要BeautifulSoup, selenium基本知識)。

目標(biāo)

用scrapy去抓取自從有了知乎,再也不用找福利了……收藏夾下每一個答案下的全部圖片。

簡易步驟

  1. 賬號登錄知乎,抓取全部答案的鏈接(去除重復(fù)文章,大概39個答案)。
{'url': '/question/36007260', 'title': '女生堅持健身是種什么樣的體驗?', 'dec': ['健身']}
{'url': '/question/22132862', 'title': '女生如何選購適合自己的泳裝?', 'dec': ['泳裝']}
{'url': '/question/22918070', 'title': '女生如何健身鍛造好身材?', 'dec': ['健身']}
{'url': '/question/24214727', 'title': '大胸妹子如何挑選合身又好看的比基尼?', 'dec': [ '比基尼']}
{'url': '/question/263451180', 'title': '你覺得健身時哪個訓(xùn)練動作最酷炫?', 'dec': ['健身']}
{'url': '/question/28586345', 'title': '有馬甲線是種怎樣的體驗?', 'dec': ['馬甲線']}
{'url': '/question/68734869', 'title': '2017 年,你解鎖了哪些運動技能?可以用「視頻」展示么?', 'dec': ['解鎖']}
{'url': '/question/31983868', 'title': '有什么好看的泳裝推薦?', 'dec': ['泳裝']}

如上,對每一個問題提取url, 標(biāo)題和關(guān)鍵字,保存到j(luò)son文件方便后續(xù)工作。

  1. 對每一個答案,抓取該答案下所有圖片鏈接, 保存或者下載(此處用到selenium)。
  2. 結(jié)果:半天時間抓去圖片20000+張, 部分如下:


    屏幕快照 2017-12-23 23.18.04.png

詳細(xì)步驟

一. 先從2開始,目標(biāo):如何拍好私房照?鏈接下的所有圖片。

  1. 新建工程 :scrapy start zhihu
    簡單介紹一下,工程目錄:
    image.png

    zhihu/spiders:爬蟲的主要文件。
    zhihu/items.py:需要抓取的數(shù)據(jù)結(jié)構(gòu)
    zhihu/middlewares.py:中間鍵文件,selenium處理動態(tài)網(wǎng)頁。
    zhihu/pipelines.py:保存items中定義的數(shù)據(jù)結(jié)構(gòu)或者下載圖片(處理item)。

其余文件都是額外生成,不屬于爬蟲目錄。
cookies.pkl:保存登錄的cookies, 下次登錄。
questions.json: 保存所有問題的鏈接,方便后續(xù)使用。
上面兩個文件都是在第一步用到, 后續(xù)再講。

  1. 最簡單的爬蟲
    相信看到這的童鞋都有用過requests庫, BeautifulSoup去寫過簡單的爬蟲。
    這里不做討論。
    zhihu/spiders下新建zhihu.py文件,從這里開始。
import scrapy
class Zhihu(scrapy.Spider):
    name = "zhihu"
    urls = ["https://www.zhihu.com/question/22856657"]
    yield request

    def start_requests(self):
        for url in self.urls:
            request = scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        print(response.url)
        print(response.body)

name定義了爬蟲的名字,urls定義需要爬取的鏈接,從start_requests開始,yield對每一個url執(zhí)行得到生成器, scrapy經(jīng)過網(wǎng)絡(luò)請求返回后調(diào)用parse函數(shù)。
接下來在項目目錄執(zhí)行scrapy crawl zhihu 啟動爬蟲,看輸出結(jié)果。

image.png

可以看到輸出的url和html代碼,最簡單的爬蟲執(zhí)行完畢。
關(guān)鍵:該開始運行一定要日志輸出。
image.png

遇到上述問題,需要打開settings文件做如下設(shè)置:

#重試設(shè)置
RETRY_ENABLE = False

# 日志輸出
LOG_ENABLED = True
LOG_LEVEL = "INFO"

取消失敗重試,設(shè)置日志級別和是否輸出(對爬取無影響)。

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}

下載中間鍵中取消默認(rèn)的UserAgent設(shè)置,以。及對robos.txt的設(shè)置。

  1. 提取圖片鏈接。(BeautifulSoup)
    關(guān)于BeautifulSoup的使用可以看官方文檔,簡單明了。
    獲取圖片的css selector,提取圖片鏈接。
    打開該url, 右擊任何一張圖片,檢查即可看到該圖片的位置。
    image.png
image.png

如上所示,即可找到該img的位置。
接下來看代碼:

import scrapy
from bs4 import BeautifulSoup

class Zhihu(scrapy.Spider):
    name = "zhihu"
    urls = ["https://www.zhihu.com/question/22856657"]


    def start_requests(self):
        for url in self.urls:
            request = scrapy.Request(url=url, callback=self.parse)
            yield request

    def parse(self, response):
        print(response.url)
        resSoup = BeautifulSoup(response.body, 'lxml')
        items = resSoup.select("figure")
        print(len(items))
        for item in items:
            print(item)
            print(item.img)
            print(item.img['data-original'])

parse函數(shù)中,使用BeautifulSoup對網(wǎng)頁分析。
結(jié)果如下:

image.png

對比輸出,共計找到30個figure標(biāo)簽。
分別對figure,figure的子標(biāo)簽img 及其data-original屬性進行輸出。
粘貼屬性到瀏覽器打開即可看到圖片。
到此為止, 對如何拍好私房照?鏈接第一頁的圖片基本抓取完成。后面介紹怎么使用selenium對該鏈接下所有圖片進行抓取。

有疑問請加weixin:youquwen1226,一起探討。
github:https://github.com/yunshuipiao

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,480評論 2 379