婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python爬蟲之教你利用Scrapy爬取圖片

Python爬蟲之教你利用Scrapy爬取圖片

熱門標簽:京華圖書館地圖標注 電話機器人貸款詐騙 看懂地圖標注方法 廣東旅游地圖標注 蘇州人工外呼系統軟件 淮安呼叫中心外呼系統如何 佛山通用400電話申請 電話外呼系統招商代理 打印谷歌地圖標注

Scrapy下載圖片項目介紹

Scrapy是一個適用爬取網站數據、提取結構性數據的應用程序框架,它可以通過定制化的修改來滿足不同的爬蟲需求。

使用Scrapy下載圖片

項目創建

首先在終端創建項目

# win4000為項目名
$ scrapy startproject  win4000

該命令將創建下述項目目錄。

項目預覽

查看項目目錄

  • win4000
  • win4000
  • spiders
  • __init__.py
  • __init__.py
  • items.py
  • middlewares.py
  • pipelines.py
  • settings.py
  • scrapy.cfg

創建爬蟲文件

進入spiders文件夾,根據模板文件創建爬蟲文件

$ cd win4000/win4000/spiders
# pictures 為 爬蟲名
$ scrapy genspider pictures "win4000.com"

項目組件介紹

1.引擎(Scrapy):核心組件,處理系統的數據流處理,觸發事務。

2.調度器(Scheduler):用來接受引擎發出的請求, 壓入隊列中, 并在引擎再次請求的時候返回。由URL組成的優先隊列, 由它來決定下一個要抓取的網址是什么,同時去除重復的網址。

3.下載器(Downloader):用于下載網頁內容, 并將網頁內容返回給Spiders。

4.爬蟲(Spiders):用于從特定的網頁中提取自己需要的信息, 并用于構建實體(Item),也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面

5.管道(Pipeline):負責處理Spiders從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被Spiders解析后,將被發送到項目管道。

6.下載器中間件(Downloader Middlewares):位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。

7.爬蟲中間件(Spider Middlewares):介于Scrapy引擎和爬蟲之間的框架,主要工作是處理Spiders的響應輸入和請求輸出。

8.調度中間件(Scheduler Middewares):介于Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Scrapy爬蟲流程介紹

Scrapy基本爬取流程可以描述為UR2IM(URL-Request-Response-Item-More URL):

1.引擎從調度器中取出一個鏈接(URL)用于接下來的抓取;

2.引擎把URL封裝成一個請求(Request)傳給下載器;

3.下載器把資源下載下來,并封裝成應答包(Response);

4.爬蟲解析Response;

5.解析出實體(Item),則交給實體管道進行進一步的處理;

6.解析出的是鏈接(URL),則把URL交給調度器等待抓取。

頁面結構分析

首先查看目標頁面,可以看到包含多個主題,選取感興趣主題,本項目以“風景”為例(作為練習,也可以通過簡單修改,來爬取所有模塊內圖片)。

在“風景”分類頁面,可以看到每頁包含多個專題,利用開發者工具,可以查看每個專題的URL,拷貝相應XPath,利用Xpath的規律性,構建循環,用于爬取每個專題內容。

# 查看不同專題的XPath
# /html/body/div[3]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[1]/a
# /html/body/div[3]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[2]/a

利用上述結果,可以看到li[index]中index為專題序列。因此可以構建Xpath列表如下:

item_selector = response.xpath('/html/body/div[3]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li/a/@href')

利用開發者工具,可以查看下一頁的URL,拷貝相應XPath用于爬取下一頁內容。

# 查看“下一頁”的XPath
# /html/body/div[3]/div/div[3]/div[1]/div[2]/div/a[5]

因此可以構建如下XPath:

next_selector = response.xpath('//a[@class="next"]')

點擊進入專題,可以看到具體圖片,通過查看圖片XPath,用于獲取圖片地址。

# 構建圖片XPath
response.xpath('/html/body/div[3]/div/div[2]/div/div[2]/div[1]/div/a/img/@src').extract_first()

可以通過標題和圖片序列構建圖片名。


# 利用序號XPath構建圖片在列表中的序號
index = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/span/text()').extract_first()
# 利用標題XPath構建圖片標題
title = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/h1/text()').extract_first()
# 利用圖片標題title和序號index構建圖片名
name = title + '_' + index + '.jpg'

同時可以看到,在專題頁面下,包含了多張圖片,可以通過點擊“下一張”按鈕來獲取下一頁面URL,此處為了簡化爬取過程,可以通過觀察URL規律來構建每一圖片詳情頁的URL,來下載圖片。

# 第一張圖片詳情頁地址
# http://www.win4000.com/wallpaper_detail_45401.html
# 第二張圖片詳情頁地址
# http://www.win4000.com/wallpaper_detail_45401_2.html

因此可以通過首頁地址和圖片序號來構建每一張圖片詳情頁地址。

# 第一張圖片詳情頁地址
first_url = response.url
# 圖片總數
num = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/em/text()').extract_first()
num = int(num)
for i in range(2,num+1):
    next_url = '.'.join(first_url.split('.')[:-1]) + '_' + str(i) + '.html'

定義Item字段(Items.py)

本項目用于下載圖片,因此可以僅構建圖片名和圖片地址字段。

# win4000/win4000/items.py
import scrapy

class Win4000Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    url = scrapy.Field()
    name = scrapy.Field()

編寫爬蟲文件(pictures.py)

代碼詳解見代碼注釋。

# win4000/win4000/spiders/pictures.py
import scrapy
from win4000.items import Win4000Item
from urllib import parse
import time

class PicturesSpider(scrapy.Spider):
    name = 'pictures'
    allowed_domains = ['win4000.com']
    start_urls = ['http://www.win4000.com/zt/fengjing.html']
    
    start_urls = ['http://www.win4000.com/zt/fengjing.html']
    # cookie用于模仿瀏覽器行為
    cookie={
                "t":"29b7c2a8d2bbf060dc7b9ec00e75a0c5",
                "r":"7957",
                "UM_distinctid":"178c933b40e9-08430036bca215-7e22675c-1fa400-178c933b40fa00",
                "CNZZDATA1279564249":"1468742421-1618282415-%7C1618282415",
                "XSRF-TOKEN":"eyJpdiI6Ik8rbStsK1Fwem5zR2YzS29ESlI2dmc9PSIsInZhbHVlIjoiaDl5bXp5b1VvWmdSYklWWkEwMWJBK0FaZG9OaDA1VGQ2akZ0RDNISWNDM0hnOW11Q0JTVDZFNlY4cVwvSTBjQlltUG9tMnFUcWd5MzluUVZ0NDBLZlJuRWFuaVF0U3k0XC9CU1dIUzJybkorUEJ3Y2hRZTNcL0JqdjZnWjE5SXFiNm8iLCJtYWMiOiI2OTBjOTkzMTczYWQwNzRiZWY5MWMyY2JkNTQxYjlmZDE2OWUyYmNjNDNhNGYwNDAyYzRmYTk5M2JhNjg5ZmMwIn0%3D",
                "win4000_session":"eyJpdiI6Inc2dFprdkdMTHZMSldlMXZ2a1cwWGc9PSIsInZhbHVlIjoiQkZHVlNYWWlET0NyWWlEb2tNS0hDSXAwZGVZV05vTmY0N0ZiaFdTa1VRZUVqWkRmNWJuNGJjNkFNa3pwMWtBcFRleCt4SUFhdDdoYnlPMGRTS0dOR0tkdmVtVDhzUWdTTTc3YXpDb0ZPMjVBVGJzM2NoZzlGa045Qnl0MzRTVUciLCJtYWMiOiI2M2VmMTEyMDkxNTIwNmJjZjViYTg4MjIwZGIxNTlmZWUyMTJlYWZhNjk5ZmM0NzgyMTA3MWE4MjljOWY3NTBiIn0%3D"
            }
    
    def start_requests(self):
        """
        重構start_requests函數,用于發送帶有cookie的請求,模仿瀏覽器行為
        """
        yield scrapy.Request('http://www.win4000.com/zt/fengjing.html', callback=self.parse, cookies=self.cookie)

    def parse(self,response):
    	# 獲取下一頁的選擇器
        next_selector = response.xpath('//a[@class="next"]')
        for url in next_selector.xpath('@href').extract():
            url = parse.urljoin(response.url,url)
            # 暫停執行,防止網頁的反爬蟲程序
            time.sleep(3)
            # 用于爬取下一頁
            yield scrapy.Request(url, cookies=self.cookie)
        # 用于獲取每一專題的選擇器
        item_selector = response.xpath('/html/body/div[3]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li/a/@href')
        for item_url in item_selector.extract():
            item_url = parse.urljoin(response.url,item_url)
            #print(item_url)
            time.sleep(3)
            # 請求專題頁面,并利用回調函數callback解析專題頁面
            yield scrapy.Request(item_url,callback=self.parse_item, cookies=self.cookie)
            
    def parse_item(self,response):
        """
        用于解析專題頁面
        """
        # 由于Scrapy默認并不會爬取重復頁面,
        # 因此需要首先構建首張圖片實體,然后爬取剩余圖片,
        # 也可以通過使用參數來取消過濾重復頁面的請求
        # 首張圖片實體
        item = Win4000Item()
        item['url'] = response.xpath('/html/body/div[3]/div/div[2]/div/div[2]/div[1]/div/a/img/@src').extract_first()
        index = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/span/text()').extract_first()
        item['name'] = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/h1/text()').extract_first() + '_' + index + '.jpg'
        yield item
        first_url = response.url
        num = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/em/text()').extract_first()
        num = int(num)
        for i in range(2,num+1):
            next_url = '.'.join(first_url.split('.')[:-1]) + '_' + str(i) + '.html'
            # 請求其余圖片,并用回調函數self.parse_detail解析頁面
            yield scrapy.Request(next_url,callback=self.parse_detail,cookies=self.cookie)

    def parse_detail(self,response):
        """
        解析圖片詳情頁面,構建實體
        """
        item = Win4000Item()
        item['url'] = response.xpath('/html/body/div[3]/div/div[2]/div/div[2]/div[1]/div/a/img/@src').extract_first()
        index = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/span/text()').extract_first()
        item['name'] = response.xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/h1/text()').extract_first() + '_' + index + '.jpg'
        yield item

修改配置文件settings.py

修改win4000/win4000/settings.py中的以下項。

BOT_NAME = 'win4000'

SPIDER_MODULES = ['win4000.spiders']
NEWSPIDER_MODULE = 'win4000.spiders'
# 圖片保存文件夾
IMAGES_STORE = './result'


# Crawl responsibly by identifying yourself (and your website) on the user-agent
# 用于模仿瀏覽器行為
USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# 下載時延
DOWNLOAD_DELAY = 3

# Disable cookies (enabled by default)
# 是否啟用Cookie
COOKIES_ENABLED = True

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'win4000.pipelines.Win4000Pipeline': 300,
}

修改管道文件pipelines.py用于下載圖片

修改win4000/win4000/pipelines.py文件。

from itemadapter import ItemAdapter
from scrapy.pipelines.images import ImagesPipeline
import scrapy
import os
from scrapy.exceptions import DropItem

class Win4000Pipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        # 下載圖片,如果傳過來的是集合需要循環下載
        # meta里面的數據是從spider獲取,然后通過meta傳遞給下面方法:file_path
        yield scrapy.Request(url=item['url'],meta={'name':item['name']})

    def item_completed(self, results, item, info):
        # 是一個元組,第一個元素是布爾值表示是否成功
        if not results[0][0]:
            with open('img_error_name.txt','a') as f_name:
                error_name = str(item['name'])
                f_name.write(error_name)
                f_name.write('\n')

            with open('img_error_url.txt','a') as f_url:
                error_url = str(item['url'])
                f_url.write(error_url)
                f_url.write('\n')
                raise DropItem('下載失敗')
        return item

     # 重命名,若不重寫這函數,圖片名為哈希,就是一串亂七八糟的名字
    def file_path(self, request, response=None, info=None):
        # 接收上面meta傳遞過來的圖片名稱
        filename = request.meta['name']
        return filename

編寫爬蟲啟動文件begin.py

win4000目錄下創建begin.py

# win4000/begin.py
from scrapy import cmdline

cmdline.execute('scrapy crawl pictures'.split())

最終目錄樹

  •  win4000
  • begin.py
  • win4000
  • spiders
  • __init__.py
  • pictures.py
  • __init__.py
  • items.py
  • middlewares.py
  • pipelines.py
  • settings.py
  • scrapy.cfg

項目運行

進入begin.py所在目錄,運行程序,啟動scrapy進行爬蟲。

$ python3 begin.py

爬取結果

后記

本項目僅用于測試用途。
Enjoy coding.

到此這篇關于Python爬蟲之教你利用Scrapy爬取圖片的文章就介紹到這了,更多相關python中用Scrapy爬取圖片內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python爬蟲實戰之使用Scrapy爬取豆瓣圖片
  • Python爬取網站圖片并保存的實現示例
  • python制作微博圖片爬取工具
  • python繞過圖片滑動驗證碼實現爬取PTA所有題目功能 附源碼
  • 利用python批量爬取百度任意類別的圖片的實現方法
  • Python使用xpath實現圖片爬取
  • Python Scrapy圖片爬取原理及代碼實例
  • Python3直接爬取圖片URL并保存示例
  • python爬取某網站原圖作為壁紙
  • 用Python做一個嗶站小姐姐詞云跳舞視頻

標簽:中山 呼和浩特 畢節 湖州 江蘇 駐馬店 衡水 股票

巨人網絡通訊聲明:本文標題《Python爬蟲之教你利用Scrapy爬取圖片》,本文關鍵詞  Python,爬蟲,之教,你,利用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python爬蟲之教你利用Scrapy爬取圖片》相關的同類信息!
  • 本頁收集關于Python爬蟲之教你利用Scrapy爬取圖片的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美三级中文字幕在线观看| 亚洲福利国产精品| 国产一区二区女| 精品99999| 国产精品一区二区果冻传媒| 国产精品入口麻豆九色| www.久久精品| 亚洲主播在线观看| 日韩美一区二区三区| 国产主播一区二区三区| 国产精品久久久久一区二区三区 | 视频一区二区欧美| wwwwww.欧美系列| 国产福利91精品| 夜夜嗨av一区二区三区网页| 欧美高清激情brazzers| 国产一区二区伦理片| 亚洲色欲色欲www| 欧美一区二区三区四区高清| 国产麻豆欧美日韩一区| 亚洲乱码国产乱码精品精小说| 欧美日韩另类一区| 国产精品一区三区| 亚洲午夜羞羞片| 久久噜噜亚洲综合| 欧美日韩黄视频| 成人午夜在线播放| 婷婷夜色潮精品综合在线| 国产午夜精品一区二区三区视频 | 精品一区二区三区免费观看| 国产精品久久久久一区 | 欧美精品久久天天躁| 精东粉嫩av免费一区二区三区| 最新日韩在线视频| 精品欧美一区二区三区精品久久| 97精品视频在线观看自产线路二| 日本在线不卡视频| 日韩一区在线看| www激情久久| 欧美色中文字幕| 成人动漫一区二区三区| 美女网站色91| 亚洲国产综合91精品麻豆| 中文字幕高清不卡| 精品久久久网站| 欧美日韩五月天| 色综合色综合色综合| 国产传媒日韩欧美成人| 日韩电影免费在线观看网站| 综合久久给合久久狠狠狠97色| 欧美mv日韩mv国产网站app| 欧美色窝79yyyycom| 99国产精品99久久久久久| 国产一区视频网站| 毛片av一区二区| 日韩中文字幕一区二区三区| 亚洲自拍都市欧美小说| 亚洲人快播电影网| 国产精品国产三级国产普通话99| 精品久久久久久久久久久久久久久久久 | 亚洲精品你懂的| 欧美国产视频在线| 久久亚洲综合色| 欧美变态凌虐bdsm| 日韩美女视频一区二区在线观看| 欧美日韩国产精选| 欧美日韩国产一级二级| 欧美性三三影院| 在线视频你懂得一区二区三区| 成人小视频免费观看| 大尺度一区二区| 国产99精品视频| 成人动漫av在线| www.亚洲国产| 91国在线观看| 欧美四级电影网| 欧美日韩视频在线第一区| 欧美中文字幕亚洲一区二区va在线 | 正在播放亚洲一区| 91精品国产欧美日韩| 欧美一区二区在线免费播放| 欧美高清激情brazzers| 日韩一区二区三| 亚洲精品一区二区在线观看| 欧美精品一区二区蜜臀亚洲| 久久久久久一二三区| 国产亚洲va综合人人澡精品| **欧美大码日韩| 一区二区三区在线免费观看| 亚洲小少妇裸体bbw| 亚洲一卡二卡三卡四卡五卡| 国产精品久久精品日日| 亚洲三级理论片| 午夜欧美视频在线观看| 麻豆久久久久久久| 风间由美性色一区二区三区| 99国产精品国产精品久久| 欧美日韩国产精品自在自线| 精品国产成人在线影院 | 5858s免费视频成人| 69p69国产精品| xfplay精品久久| 亚洲精品免费播放| 免费观看在线色综合| 丁香天五香天堂综合| 91在线porny国产在线看| 欧美男同性恋视频网站| 精品少妇一区二区三区视频免付费 | 欧美中文字幕一区| 精品久久一二三区| 亚洲柠檬福利资源导航| 麻豆成人av在线| 91网站在线播放| 日韩欧美第一区| 亚洲欧美乱综合| 久88久久88久久久| 在线观看网站黄不卡| 久久久亚洲精品石原莉奈| 一区二区三区四区亚洲| 激情综合一区二区三区| 色狠狠色狠狠综合| 久久精品日产第一区二区三区高清版 | 精品久久久久久最新网址| 亚洲精品欧美专区| 国产一本一道久久香蕉| 欧美在线视频全部完| 国产亚洲一区二区三区在线观看| 亚洲国产欧美日韩另类综合| 成人精品在线视频观看| 日韩精品中午字幕| 夜夜揉揉日日人人青青一国产精品 | 国产精品日产欧美久久久久| 日韩精品电影在线| 在线看国产日韩| 国产精品你懂的在线欣赏| 裸体健美xxxx欧美裸体表演| 色88888久久久久久影院野外| 国产女同互慰高潮91漫画| 免费在线观看精品| 欧美日韩综合一区| 亚洲女子a中天字幕| 成人精品小蝌蚪| 久久久噜噜噜久久人人看| 轻轻草成人在线| 欧美日本不卡视频| 亚洲一区二区成人在线观看| 成人免费的视频| 国产亚洲欧美激情| 国产综合色在线| 久久综合久久综合亚洲| 免费成人深夜小野草| 欧美嫩在线观看| 天天色综合天天| 欧美日韩aaa| 丝袜美腿亚洲色图| 91精品国产综合久久精品app | 男男视频亚洲欧美| 777午夜精品视频在线播放| 亚洲二区视频在线| 欧美日韩亚洲综合在线 | 伦理电影国产精品| 欧美一区日韩一区| 五月天婷婷综合| 91精品国产91久久综合桃花| 日韩国产精品大片| 日韩三级视频在线观看| 久久超级碰视频| 国产午夜精品久久久久久久 | 一区二区激情视频| 91久久免费观看| 亚洲成人自拍一区| 日韩和欧美一区二区| 99久久久国产精品免费蜜臀| 亚洲视频一区二区在线观看| 95精品视频在线| 亚洲一区av在线| 欧美一区二区啪啪| 国产综合久久久久久久久久久久| 欧美精品一区二区蜜臀亚洲| 国产伦精一区二区三区| 国产精品狼人久久影院观看方式| 99国产一区二区三精品乱码| 亚洲国产裸拍裸体视频在线观看乱了| 欧美中文字幕一区| 久久精品久久99精品久久| 26uuuu精品一区二区| 91一区二区在线| 亚洲第一狼人社区| 久久久亚洲精品一区二区三区| 成人网页在线观看| 午夜视黄欧洲亚洲| 久久久久久久久久看片| 91免费小视频| 久久成人免费日本黄色| 1区2区3区精品视频| 91精品国产福利在线观看| 国产aⅴ综合色| 亚洲丰满少妇videoshd| 国产欧美日韩久久| 欧美日韩国产一区二区三区地区|