使用Scrapy+Selenium+PhantomJS爬取煎蛋妹子圖

本文介紹在Ubuntu linux系統下,使用Python3+Scrapy+Selenium+PhantomJS爬取煎蛋妹子圖的完整過程,其中包含幾個踩過的坑,先給大家貼上爬取的結果截圖,效果還是可以的,就是速度有點慢,後續再改進。

工具/原料

Ubuntu 18作業系統
Python3
Scrapy
selenium 2.48.0
PhantomJS

開始爬蟲前的網站分析

使用firefox瀏覽器打開煎蛋網,通過查詢網頁原始碼分析相關的圖片頁面元素,可以看到圖片顯示的地方調用了js的函數jandan_load_img進行動態加載。

網站反爬蟲措施分析

1. 煎蛋網採用Robots反爬蟲協議

2. 同時在加載圖片時還採取了反爬蟲的js算法處理,所以如果直接request的方式爬蟲,下載到的圖片地址都是blank.gif圖片的

所以我們的PhantomJS+selenium的方案,爬取動態網頁的圖片。

通過圖片元素查詢,獲取圖片相關的文檔結構信息

安裝PhantomJS和Selenium

安裝PhantomJS庫

命令:sudo apt-get install phantomjs

hxb@lion:~/PycharmProjects/jandanSpider/jandanSpider$ sudo apt-get install phantomjs

安裝beautifulsoup4庫

命令: pip install beautifulsoup4

hxb@lion:~/PycharmProjects/jandanSpider/jandanSpider$ sudo pip install beautifulsoup4

安裝selenium庫

命令: pip install selenium

hxb@lion:~/PycharmProjects/jandanSpider/jandanSpider$ sudo pip install selenium

創建爬蟲工程

創建Scrapy基礎工程:jandanSpider

hxb@lion:~/PycharmProjects$ mkdir jandanSpider

hxb@lion:~/PycharmProjects$ ls

GirlsSpider  jandanSpider  meizhiSpider  test1  zhifuSpider  zhihu.py

hxb@lion:~/PycharmProjects$ cd jandanSpider/

hxb@lion:~/PycharmProjects/jandanSpider$ ls

hxb@lion:~/PycharmProjects/jandanSpider$ scrapy startproject jandanSpider

New Scrapy project 'jandanSpider', using template directory '/home/hxb/.local/lib/python3.6/site-packages/scrapy/templates/project', created in:

/home/hxb/PycharmProjects/jandanSpider/jandanSpider

You can start your first spider with:

cd jandanSpider

scrapy genspider example example.com

使用命令生存spider文件

hxb@lion:~/PycharmProjects/jandanSpider$ cd jandanSpider/

hxb@lion:~/PycharmProjects/jandanSpider/jandanSpider$ scrapy genspider jandan jandan.net

Created spider 'jandan' using template 'basic' in module:

jandanSpider.spiders.jandan

在PyCharm編輯器中打開剛才創建的工程

修改工程的Python解釋器為python3.6環境

編寫爬蟲相關的python內容

工程環境變量的配置:settings.py

1. user_agent

2. pipelines

3. request_header

# -*- coding: utf-8 -*-BOT_NAME = 'jandanSpider'SPIDER_MODULES = ['jandanSpider.spiders']

NEWSPIDER_MODULE = 'jandanSpider.spiders'USER_AGENT = ["Mozilla/4.0 (compatible; MISE 7.0; Windows NT 5.1; Maxthon 2.0)"]ROBOTSTXT_OBEY = False

DOWNLOAD_DELAY = 3COOKIES_ENABLED = False

DEFAULT_REQUEST_HEADERS = {   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',   'Accept-Language': 'en',}DOWNLOADER_MIDDLEWARES = {    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':None,    'jandanSpider.middlewares.JandanspiderDownloaderMiddleware': 543}# Configure item pipelines# See https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES = {    'jandanSpider.pipelines.JandanspiderPipeline': 300,}

文件管道處理類 :pipelines.py

將爬取到的圖片,以圖片的標題為圖片的文件名,保存到本地指定磁碟位置

# -*- coding: utf-8 -*-import os

import requests

class JandanspiderPipeline(object):

def process_item(self, item, spider):

dir_path="/home/hxb/jandan"

if 'url' in item:

if not os.path.exists(dir_path):

os.makedirs(dir_path)

ext = "."+item["url"].split(".")[-1]

path = item["title"]+ext

file_path='%s/%s' %(dir_path,path)

if not os.path.exists(file_path):

with open(file_path,"wb") as file_handler:

file_stream = requests.get(item["url"],stream=True)

for block in file_stream.iter_content(1024):

if not block:

break

file_handler.write(block)

return item

爬蟲獲取的數據欄位定義:items.py

定義兩個欄位保存圖片的連結和標題:url和title

爬蟲處理解析類:jandan.py

# -*- coding: utf-8 -*-

import scrapy

from jandanSpider.items import JandanspiderItem

from selenium import webdriver

from bs4 import BeautifulSoup as bs4

import time

class JandanSpider(scrapy.Spider):

name = 'jandan'

allowed_domains = ['jandan.net']

start_urls =['https://jandan.net/ooxx/']

def parse(self, response):

img_item = JandanspiderItem()

driver = webdriver.PhantomJS()

print("--->req to the RUL:%s" %response.url)

driver.get(response.url)

#time sleep is very import to load the url

time.sleep(120)

soup = bs4(driver.page_source,'html.parser')

all_code_source=soup.find_all('div', {'class':'row'})

for t_div in all_code_source:

print("******************\n")

title = t_div.find("strong")

img_item["title"] = title.get_text().strip()

print("******************\n")

print("title :%s" % title)

link_url = t_div.find("a",{"class":'view_img_link'})

print("a link :%s" % link_url)

if len(link_url) ==0:

yield img_item

url = link_url.get("href")

if len(url) == 0:

return

img_item["url"] ="https://" + url.split("//")[-1]

yield img_item

#for prevision page

pre_page=soup.find('a',{"class":'previous-comment-page'})

if len(pre_page) == 0:

return

pre_page_link = pre_page.get("href")

if pre_page_link:

#the last element

pre_page_url = "https://"+ pre_page_link.split("//")[-1]

yield scrapy.Request(pre_page_url, callback=self.parse)

else:

print("No More Page")

driver.quit()

運行爬蟲測試結果

運行爬蟲:scrapy crawl jandan

hxb@lion:~/PycharmProjects/jandanSpider/jandanSpider$ scrapy crawl jandan

查看爬蟲的結果,可以在本地指定的文件目錄中看到下載的圖片

注意事項

在打開url後需要等待網頁內容全部加載完後再進行頁面元素解析

相關文章

  1. 如何使用scrapy shell 爬取數據

    如何使用scrapy shell 爬取數據 工具/原料 電腦 cmd命令行 方法/步驟 第一步:我們首先切到命令行窗口,找到我們scrapy項目目錄. 第二步:我們直接在項目目錄中輸入scrapy s ...
  2. 使用selenium爬取二手房源信息

    房價總是一路高啊,高得仰起頭看都要扭到脖子了,但是呢,做人還是要有目標的,提前了解市場,研究一下自己喜歡地區的放假還是有作用的,萬一有撿漏呢~今天利用selenium爬取58上的二手房信息. 工具/原 ...
  3. 早餐——愛心吐司煎蛋

    早餐是一天中最重要的一餐,早餐吃好不但有益於健康,更能讓我們精力充沛的開始新的一天.今天給大家帶來的這道愛心早餐做法非常的簡單,10分鐘就可以出爐,營養又美味. 食材 主料 吐司 :2片 雞蛋 :3個 ...
  4. 美味煎蛋炒麵的做法

    麵條是中國的傳統美食,它不光可以做成湯麵 炸醬麵 打滷面還可以炒著吃,加上喜歡的蔬菜和蛋類,營養與美味並存. 食材[食譜熱量:1709.5(大卡)] 主料 切面:200克 洋蔥:少許 豆芽:少許 胡蘿 ...
  5. 家常苦瓜煎蛋

    降壓降糖.利尿涼血.解勞清心 食材[食譜熱量:311(大卡)] 主料 苦瓜:兩根 雞蛋:3個 輔料 鹽,味素:適量 蔥:適量 方法/步驟 先將苦瓜去籽,切成小丁備用 把雞蛋磕到大腕里攪勻,放入蔥苦瓜鹽 ...
  6. 怎麼做煎蛋三明治

    出門或者遠行的時候,可以自己準備點三明治,簡單健康又美味. 食材[食譜熱量:3675.5(大卡)] 主料 麵包片:兩片 雞蛋:一個 青菜:兩片 芝士片:兩片 培根:三片 西紅柿:一顆 輔料 番茄醬:少 ...
  7. 土豆烘煎蛋 烘焙

    "土豆對於土豆控來說,一天三頓吃也不會覺著膩,更何況土豆作為國民主食會更加豐富我們的餐桌,既做主食又做蔬菜的土豆,會被賦予更多的"使命",主婦(夫)們要絞盡腦汁,開發出各 ...
  8. 怎樣做海蠣煎蛋?

    海蠣煎蛋屬於老人食療藥膳食譜之一,對改善症狀十分有幫助,讓美食傑告訴你海蠣煎蛋怎麼做最好吃!海蠣煎蛋的做法非常簡單,並不一定要看視頻菜譜才能學會,跟著海蠣煎蛋的圖解做法一樣可以做出自己的美味.讓我們一 ...
  9. 韭菜煎蛋做法詳細

    美味鮮香. 食材[食譜熱量:404(大卡)] 主料 韭菜:1000克 雞蛋:2個 輔料 鹽:適量 油:適量 方法/步驟 韭菜洗淨,切段. 雞蛋打到碗裡,加適量鹽打散成蛋液. 將韭菜倒進蛋液里,調勻. ...
  10. 苦瓜煎蛋的做法,營養不上火

    苦瓜煎蛋的做法,營養不上火 食材 主料 參見步驟:適量 方法/步驟 苦瓜洗淨切片,加適量鹽醃出水份,用手抓去水份,用清水略洗一下後備用. 雞蛋砸入盆中打散備用. 蔥切長段備用. 熱鍋放油,放入蒜蓉炒香 ...
  11. 蝦仁煎蛋如何做更好吃

    雞蛋,做法很多,煮.煎.炒.蒸.或湯,都易常美味.加了幾粒蝦仁同炒變得更加鮮美. 雞蛋營養豐富,是天然好食品.雞蛋有清熱.解毒.消炎.保護黏膜的作用.蛋黃味甘,性平,有祛熱.溫胃.鎮靜.消炎等功效.雞 ...
  12. 愛心土司煎蛋:簡單的小浪漫

    愛崗敬業.開拓進取.創新服務.放眼未來. 愛心土司煎蛋 主料:低糖全麥麵包一片,柴雞蛋1個 輔料:黃油.鹽.黑胡椒適量 製作方法: 1.麵包用模具取出中間的一塊.如果沒有模具,可以直接用小刀切下. 2 ...
  13. 美味西紅柿煎蛋

    我們以前做西紅柿炒蛋是,西紅柿的皮是不去掉的,今天,小編就介紹一種去皮的西紅柿煎蛋的做法 食材[食譜熱量:307(大卡)] 主料 西紅柿:2個 雞蛋:4個 輔料 薑末:少許 蔥花:少許 胡椒:少許 食 ...
  14. 如何做最簡單的韭菜煎蛋

    很多人現在都不喜歡做飯了,是嫌做飯菜太複雜,現在讓小編教你做最簡單的一道菜,只要你看了保證絕對可以學會哦. 食材[食譜熱量:861.5(大卡)] 主料 韭菜:200g 雞蛋:5 輔料 花生油:適量 鹽 ...
  15. 銀魚煎蛋怎麼做

    材料: 主料:銀魚200克  雞蛋300克 調料:姜2克  鹽5克  小蔥2克  黃酒15克  豬油(煉製) 30克 銀魚煎蛋詳細製作步驟 1.蛋打勻,加入蔥花,鹽.銀魚洗淨,控水 2.不粘鍋熱後,加 ...
  16. 豆腐新吃法——香蔥豆腐煎蛋

    豆腐和雞蛋營養豐富,都是我們日常應該常吃的食物,那天突發奇想,將兩樣食材搭配在一起,做一下試試,沒想到味道還真是出奇的好. 豆腐是人們公認的保健佳品,其在防病保健上的奉獻是多方面的,適量地食用豆腐確實 ...
  17. 簡單的家常菜——辣椒煎蛋

    在炎熱的夏季,經常會沒有胃口,餐桌上擺著香噴噴的辣椒炒蛋時常能令人胃口大增. 食材[食譜熱量:192(大卡)] 主料 辣椒:3個 雞蛋:2個 輔料 油:適量 鹽:適量 方法/步驟 先將辣椒洗乾淨,備用 ...
  18. 教你畫火腿煎蛋2015

    火腿煎蛋是一種很常見的早餐,很香很好吃,我來教大家畫一下火腿煎蛋 工具/原料 電腦畫圖 方法/步驟 第一步,畫一個大圓形作為鍋子 在圓形裡面畫一個小圓作為煎蛋的蛋黃 在小圓的外面畫一些大一點波浪圓作為 ...
  19. 教你豆角煎蛋的做法

    教你豆角煎蛋的做法 1.豆角除了有健脾.和胃的作用外,最重要的是能夠補腎.多吃豇豆還能治療嘔吐.打嗝等不適.小孩食積.氣脹的時候,用生豇豆適量,細嚼後咽下,可以起到一定的緩解作用. 2.雞蛋含有豐富的 ...
  20. 青椒煎蛋的做法 怎麼做辣椒煎蛋

    辣椒煎蛋怎麼做好吃,本人比較喜歡把辣椒垛碎熟到五六分熟的時候,再加雞蛋去攪勻再次下鍋去煎,下面看看我是怎麼做的. 食材[食譜熱量:384(大卡)] 主料 雞蛋:4 辣椒:300g 蒜頭:適量 方法/步 ...