最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實現(xiàn)代碼

 更新時間:2018年03月04日 10:57:03   作者:William126  
這篇文章主要介紹了Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實現(xiàn)代碼,需要的朋友可以參考下

大家可以在Github上clone全部源碼。

Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu

Scrapy官方文檔:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html

基本上按照文檔的流程走一遍就基本會用了。

Step1:

在開始爬取之前,必須創(chuàng)建一個新的Scrapy項目。 進入打算存儲代碼的目錄中,運行下列命令:

scrapy startproject CrawlMeiziTu

該命令將會創(chuàng)建包含下列內(nèi)容的 tutorial 目錄:

CrawlMeiziTu/
 scrapy.cfg
 CrawlMeiziTu/
  __init__.py
  items.py
  pipelines.py
  settings.py
     middlewares.py
  spiders/
   __init__.py
   ...
cd CrawlMeiziTu
scrapy genspider Meizitu http://www.meizitu.com/a/list_1_1.html

該命令將會創(chuàng)建包含下列內(nèi)容的 tutorial 目錄:

CrawlMeiziTu/
 scrapy.cfg
 CrawlMeiziTu/
     __init__.py
  items.py
  pipelines.py
  settings.py
     middlewares.py
  spiders/
       Meizitu.py
   __init__.py
   ...

我們主要編輯的就如下圖箭頭所示:

main.py是后來加上的,加了兩條命令,

from scrapy import cmdline
cmdline.execute("scrapy crawl Meizitu".split())

主要為了方便運行。

Step2:編輯Settings,如下圖所示

 BOT_NAME = 'CrawlMeiziTu' 
 SPIDER_MODULES = ['CrawlMeiziTu.spiders']
 NEWSPIDER_MODULE = 'CrawlMeiziTu.spiders'
 ITEM_PIPELINES = {
 'CrawlMeiziTu.pipelines.CrawlmeizituPipeline': 300,
 }
 IMAGES_STORE = 'D://pic2'
 DOWNLOAD_DELAY = 0.3

 USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
 ROBOTSTXT_OBEY = True

主要設(shè)置USER_AGENT,下載路徑,下載延遲時間

Step3:編輯Items.

Items主要用來存取通過Spider程序抓取的信息。由于我們爬取妹子圖,所以要抓取每張圖片的名字,圖片的連接,標(biāo)簽等等

# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class CrawlmeizituItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 #title為文件夾名字
 title = scrapy.Field()
 url = scrapy.Field()
 tags = scrapy.Field()
 #圖片的連接
 src = scrapy.Field()
 #alt為圖片名字
 alt = scrapy.Field()

Step4:編輯Pipelines

Pipelines主要對items里面獲取的信息進行處理。比如說根據(jù)title創(chuàng)建文件夾或者圖片的名字,根據(jù)圖片鏈接下載圖片。

# -*- coding: utf-8 -*-
import os
import requests
from CrawlMeiziTu.settings import IMAGES_STORE
class CrawlmeizituPipeline(object):
 def process_item(self, item, spider):
  fold_name = "".join(item['title'])
  header = {
   'USER-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
   'Cookie': 'b963ef2d97e050aaf90fd5fab8e78633',
   #需要查看圖片的cookie信息,否則下載的圖片無法查看
  }
  images = []
  # 所有圖片放在一個文件夾下
  dir_path = '{}'.format(IMAGES_STORE)
  if not os.path.exists(dir_path) and len(item['src']) != 0:
   os.mkdir(dir_path)
  if len(item['src']) == 0:
   with open('..//check.txt', 'a+') as fp:
    fp.write("".join(item['title']) + ":" + "".join(item['url']))
    fp.write("\n")
  for jpg_url, name, num in zip(item['src'], item['alt'],range(0,100)):
   file_name = name + str(num)
   file_path = '{}//{}'.format(dir_path, file_name)
   images.append(file_path)
   if os.path.exists(file_path) or os.path.exists(file_name):
    continue
   with open('{}//{}.jpg'.format(dir_path, file_name), 'wb') as f:
    req = requests.get(jpg_url, headers=header)
    f.write(req.content)
  return item

Step5:編輯Meizitu的主程序。

最重要的主程序:

# -*- coding: utf-8 -*-
import scrapy
from CrawlMeiziTu.items import CrawlmeizituItem
#from CrawlMeiziTu.items import CrawlmeizituItemPage
import time
class MeizituSpider(scrapy.Spider):
 name = "Meizitu"
 #allowed_domains = ["meizitu.com/"]
 start_urls = []
 last_url = []
 with open('..//url.txt', 'r') as fp:
  crawl_urls = fp.readlines()
  for start_url in crawl_urls:
   last_url.append(start_url.strip('\n'))
 start_urls.append("".join(last_url[-1]))
 def parse(self, response):
  selector = scrapy.Selector(response)
  #item = CrawlmeizituItemPage()
  next_pages = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/@href').extract()
  next_pages_text = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/text()').extract()
  all_urls = []
  if '下一頁' in next_pages_text:
   next_url = "http://www.meizitu.com/a/{}".format(next_pages[-2])
   with open('..//url.txt', 'a+') as fp:
    fp.write('\n')
    fp.write(next_url)
    fp.write("\n")
   request = scrapy.http.Request(next_url, callback=self.parse)
   time.sleep(2)
   yield request
  all_info = selector.xpath('//h3[@class="tit"]/a')
  #讀取每個圖片夾的連接
  for info in all_info:
   links = info.xpath('//h3[@class="tit"]/a/@href').extract()
  for link in links:
   request = scrapy.http.Request(link, callback=self.parse_item)
   time.sleep(1)
   yield request
  # next_link = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/@href').extract()
  # next_link_text = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/text()').extract()
  # if '下一頁' in next_link_text:
  #  nextPage = "http://www.meizitu.com/a/{}".format(next_link[-2])
  #  item['page_url'] = nextPage
  #  yield item

   #抓取每個文件夾的信息
 def parse_item(self, response):
   item = CrawlmeizituItem()
   selector = scrapy.Selector(response)

   image_title = selector.xpath('//h2/a/text()').extract()
   image_url = selector.xpath('//h2/a/@href').extract()
   image_tags = selector.xpath('//div[@class="metaRight"]/p/text()').extract()
   if selector.xpath('//*[@id="picture"]/p/img/@src').extract():
   image_src = selector.xpath('//*[@id="picture"]/p/img/@src').extract()
   else:
   image_src = selector.xpath('//*[@id="maincontent"]/div/p/img/@src').extract()
   if selector.xpath('//*[@id="picture"]/p/img/@alt').extract():
    pic_name = selector.xpath('//*[@id="picture"]/p/img/@alt').extract()
   else:
   pic_name = selector.xpath('//*[@id="maincontent"]/div/p/img/@alt').extract()
   #//*[@id="maincontent"]/div/p/img/@alt
   item['title'] = image_title
   item['url'] = image_url
   item['tags'] = image_tags
   item['src'] = image_src
   item['alt'] = pic_name
   print(item)
   time.sleep(1)
   yield item

總結(jié)

以上所述是小編給大家介紹的Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實現(xiàn)代碼,希望對大家有所幫助,如果大家啊有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • python已協(xié)程方式處理任務(wù)實現(xiàn)過程

    python已協(xié)程方式處理任務(wù)實現(xiàn)過程

    這篇文章主要介紹了python已協(xié)程方式處理任務(wù)實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python-openCV讀RGB通道圖實例

    Python-openCV讀RGB通道圖實例

    今天小編就為大家分享一篇Python-openCV讀RGB通道圖實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python如何為list實現(xiàn)find方法

    python如何為list實現(xiàn)find方法

    這篇文章主要介紹了python如何為list實現(xiàn)find方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python通過socket查詢whois的方法

    python通過socket查詢whois的方法

    這篇文章主要介紹了python通過socket查詢whois的方法,涉及Python基于socket模塊進行查詢的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • tensorflow 獲取模型所有參數(shù)總和數(shù)量的方法

    tensorflow 獲取模型所有參數(shù)總和數(shù)量的方法

    今天小編就為大家分享一篇tensorflow 獲取模型所有參數(shù)總和數(shù)量的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python3 實現(xiàn)文件批量重命名示例代碼

    Python3 實現(xiàn)文件批量重命名示例代碼

    在Python中os模塊里,os.renames() 方法用于遞歸重命名目錄或文件。這篇文章主要介紹了Python3 文件批量重命名操作示例,需要的朋友可以參考下
    2019-06-06
  • Python破解BiliBili滑塊驗證碼的思路詳解(完美避開人機識別)

    Python破解BiliBili滑塊驗證碼的思路詳解(完美避開人機識別)

    這篇文章主要介紹了Python破解BiliBili滑塊驗證碼的思路,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python提取word文件中的所有圖片

    python提取word文件中的所有圖片

    辦公中,偶爾會碰到一種情況,需要提取word文檔中的圖片,決定寫這樣一款工具自動提取圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 詳解Python yaml模塊

    詳解Python yaml模塊

    這篇文章主要介紹了Python yaml模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式

    Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式

    這篇文章主要介紹了Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論

安康市| 麻栗坡县| 河源市| 新昌县| 长宁县| 长治市| 镇赉县| 东阳市| 镶黄旗| 化州市| 淄博市| 平南县| 霍林郭勒市| 江西省| 二连浩特市| 繁峙县| 习水县| 安徽省| 神池县| 青川县| 湖州市| 芷江| 深圳市| 拜泉县| 宜兴市| 周至县| 滕州市| 永平县| 辽阳县| 英山县| 泸水县| 吉林市| 青川县| 高台县| 上高县| 札达县| 汾西县| 湖口县| 波密县| 玛纳斯县| 高邮市|