當前位置:
首頁 > 知識 > Scrapy教程——豆瓣電影圖片爬取

Scrapy教程——豆瓣電影圖片爬取

一、先上效果二、安裝Scrapy和使用

官方網址:https://scrapy.org/。

安裝命令:pip install Scrapy

安裝完成,使用默認模板新建一個項目,命令:scrapy startproject xx

Scrapy教程——豆瓣電影圖片爬取

上圖很形象的說明了,scrapy的運行機制。具體各部分的含義和作用,可自行百度,這裡不再贅述。我們一般,需要做的是以下步驟。

1)配置settings,其他配置可根據自己的要求查看文檔配置。

DEFAULT_REQUEST_HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.10 Safari/537.36"
}
DOWNLOAD_TIMEOUT = 30
IMAGES_STORE = "Images"

2)定義items類,相當於Model類。如:

class CnblogImageItem(scrapy.Item):
image = scrapy.Field
imagePath = scrapy.Field
name = scrapy.Field

3)配置下載中間件,下載中間件的作用是自定義,怎麼發請求。一般有處理代理的中間件、PhantomJs的中間件等。這裡,我們只用到代理中間件。

class GaoxiaoSpiderMiddleware(object):

def process_request(self, request, spider):
if len(request.flags) > 0 and request.flags[0] == "img":
return None
driver = webdriver.PhantomJS
# 設置全屏
driver.maximize_window
driver.get(request.url)
content = driver.page_source
driver.quit
return HtmlResponse(request.url, encoding="utf-8", body=content)

class ProxyMiddleWare(object):

def process_request(self, request, spider):
request.meta["proxy"] = "http://175.155.24.103:808"

4)編寫pipeline,作用是處理從Spider中傳過來的item,保存excel、資料庫、下載圖片等。這裡給出我的下載圖片代碼,使用的是官方的下載圖片框架。

class CnblogImagesPipeline(ImagesPipeline):
IMAGES_STORE = get_project_settings.get("IMAGES_STORE")

def get_media_requests(self, item, info):
image_url = item["image"]
if image_url != "":
yield scrapy.Request(str(image_url), flags=["img"])

def item_completed(self, result, item, info):
image_path = [x["path"] for ok, x in result if ok]

if image_path:
# 重命名
if item["name"] != None and item["name"] != "":
ext = os.path.splitext(image_path[0])[1]
os.rename(self.IMAGES_STORE + "/" +
image_path[0], self.IMAGES_STORE + "/" + item["name"] + ext)
item["imagePath"] = image_path
else:
item["imagePath"] = ""
return item

5)編寫自己的Spider類,Spider的作用是配置一些信息、起始url請求、處理響應數據。這裡的下載中間件配置、pipeline,可以放在settings文件中。這裡我放在,各自的Spider中,因為項目中包含多個Spider,相互之間用的下載中間件不同,因此分開配置了。

# coding=utf-8
import sys
import scrapy
import gaoxiao.items
import json
reload(sys)
sys.setdefaultencoding("utf-8")

class doubanSpider(scrapy.Spider):
name = "douban"
allowed_domains = ["movie.douban.com"]
baseUrl = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start="
start = 0
start_urls = [baseUrl + str(start)]
custom_settings = {
"DOWNLOADER_MIDDLEWARES": {
"gaoxiao.middlewares.ProxyMiddleWare": 1,
# "gaoxiao.middlewares.GaoxiaoSpiderMiddleware": 544
},
"ITEM_PIPELINES": {
"gaoxiao.pipelines.CnblogImagesPipeline": 1,
}
}

def parse(self, response):
data = json.loads(response.text)["subjects"]
for i in data:
item = gaoxiao.items.CnblogImageItem
if i["cover"] != "":
item["image"] = i["cover"]
item["name"] = i["title"]
else:
item["image"] = ""
yield item
if self.start < 400: self.start += 20 yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

Linux centos 7 搭建 Javaweb 伺服器
WebService入門實例教程
Web緩存相關知識整理
JVM類載入以及執行的實戰
Spring Boot的properties配置文件讀取

TAG:科技優家 |

您可能感興趣

Gabby鑽石英語——電影
還原嗎?漫改電影《principal》新角色截圖公開
Disney 以動畫《Zootopia》惡搞奧斯卡提名電影海報
電影 The commuter
看電影 Three Billboards
Newscope Films英國電影公司品牌形象VI設計
Prime 1 Studio公布了DC電影《正義聯盟》版超人雕像細節圖
Kanye West 為 Dame Dash 新電影設計周邊系列
Keira Knightley 對古裝電影上癮了
電影推介:觸不可及 Intouchables
電影推薦《No Game No Life Zero》
微電影一樣的C4D動圖,來自法國插畫師Guillaume Kurkdjian
【電影篇】《Jackie》
著名電影攝影師的Instagram賬號推薦
先行欣賞《Thor: Ragnarok》電影中被刪減場景片段
Arri發布新款電影攝影機Alexa LF
荷蘭電影博物館 EYE Film Museum
Magic Leap 微軟和電影院宣布重金AR計劃
女星Kiersey Clemons確認加盟重啟版佐羅電影
《The Incredibles 2》最新電影官方預告正式發布