scrapy爬蟲,爬取圖片

1、scrapy的安裝:html

本文基於Anacoda3,python

Anacoda2和3如何同時安裝?網絡

將Anacoda3安裝在C:\ProgramData\Anaconda2\envs文件夾中便可。dom

如何用conda安裝scrapy?scrapy

安裝了Anaconda2和3後,ide

 

 

如圖,只有一個命令框,能夠看到打開的時候:url

 

 

能夠切到Anaconda3對應的路徑下便可。spa

安裝的方法:cmd中:conda install scrapy便可。htm

固然,可能會出現權限的問題,那是由於安裝的文件夾禁止了讀寫。能夠如圖:blog

將權限都設爲「容許「。

注意:此時雖然scapy安裝上了,可是在cmd中輸入scapy可能會不認,能夠將安裝scrapy.exe的路徑添加到環境變量中。

 

2、scapy的簡單使用

例子:爬取圖片

一、 建立scrapy工程

譬如,想要建立工程名:testImage

輸入:scrapy startproject testImage

便可建立該工程,按照cmd中提示的依次輸入:

cd testImage

scrapy genspider getPhoto www.27270.com/word/dongwushijie/2013/4850.html

其中:在當前項目中建立spider,這僅僅是建立spider的一種快捷方法,該方法可使用提早定義好的模板來生成spider,後面的網址是一個採集網址的集合,即爲容許訪問域名的一個判斷。注意不要加http/https。

 

至此,能夠在testImage\testImage\spiders中找到建立好的爬蟲getPhoto.py,能夠在此基礎上進行修改。

二、建立爬蟲

如圖,能夠在圖片的位置右鍵,檢查,查看源碼,在圖片所在的位置處,將xpath拷貝出來。

此時,能夠找出圖片的地址:

class GetphotoSpider(scrapy.Spider):
    name = 'getPhoto'
    allowed_domains = ['www.27270.com']
    start_urls = ['http://www.27270.com/word/dongwushijie/2013/4850.html']
    def parse(self, response):
        urlImage = response.xpath('//*[@id="picBody"]/p/a[1]/img/@src').extract()
        print(urlImage)
        pass

  

此時,注意網絡路徑的正確書寫,最後沒有/,

http://www.27270.com/word/dongwushijie/2013/4850.html/   

此時將4850.html 看成了目錄,會出現404找不到路徑的錯誤!

三、 下載圖片

items.py:

class PhotoItem(scrapy.Item):
    name = scrapy.Field()
    imageLink = scrapy.Field()

pipelines.py:

from scrapy.pipelines.images import ImagesPipeline
import scrapy
class ImagePipeline(ImagesPipeline):
    def get_media_requests(self,item,info):
        image_link = item['imageLink']
        yield scrapy.Request(image_link)

  

settings.py:

IMAGES_STORE = r"C:\Users\24630\Desktop\test"

另外,對於上面的網址,還須要ROBOTSTXT_OBEY = False

而且,訪問該網址會出現302錯誤,這是一個重定向的問題,

MEDIA_ALLOW_REDIRECTS =True

設置該選項,就能夠正確下載,可是下載的仍是不對,問題很差解決。

固然在爬蟲中,還要對items賦值:

from testImage import items
。。。

for urllink in urlImage:
      item = items.PhotoItem()
      item['imageLink'] = urllink

  

3、 進一步爬取(讀取下一頁)

# -*- coding: utf-8 -*-
import scrapy
from testImage import items
class GetphotoSpider(scrapy.Spider):
    name = 'getPhoto'
    allowed_domains = ['www.wmpic.me']
    start_urls = ['http://www.wmpic.me/93912']
    def parse(self, response):
        #//*[@id="content"]/div[1]/p/a[2]/img
        urlImage = response.xpath('//*[@id="content"]/div[1]/p/a/img/@src').extract()
        print(urlImage)
        for urllink in urlImage:
            item = items.PhotoItem()
            item['imageLink'] = urllink            
            yield item
            
            
        ifnext  = response.xpath('//*[@id="content"]/div[2]/text()').extract()[0] 
        # 當沒有下一篇,即最後一頁中止爬取
        if("下一篇" in ifnext):
            nextUrl = response.xpath('//*[@id="content"]/div[2]/a/@href').extract()[0]
            url=response.urljoin(nextUrl)
            yield scrapy.Request(url=url)

  此時,即可以看到路徑下的下載後的文件了。(因爲該網址每頁的圖片所在的xpath都不同,故下載的圖片不全)

相關文章
相關標籤/搜索