安裝scrapy
pip install Scrapy
爬蟲圖像文件存儲,進入終端,切換到自己項目代碼的工作空間下,執行
scrapy startproject baidu_pic_spider
生成如下工程文件:
images是自己創建的用于存放爬到的圖片目錄。
在spiders目錄下創建baidu_pic_spider爬蟲文件,search_word可改成自己需要的搜索詞。
python批量爬取圖片、baidu_pic_spider.py
import scrapy, json
from scrapy.http import Request
python爬取網站?from PicSpider.items import PicItem # 導入item
class PicSpider(scrapy.Spider):
name = "pic_spider"
python處理Excel。allowed_domains = ["http://image.baidu.com/"]
start_urls = ["http://image.baidu.com"]
def parse(self, response): # 定義解析函數
如何利用python爬取圖片?search_word = '哈士奇' # 查找詞,可修改
baidu_pic_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={0}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=60&rn=30&gsm=3c&1507915209449=".format(
search_word) # 百度圖片url
# 將帶關鍵詞參數的url交給request函數解析,返回的response通過get_pic回調函數進一步分析
yield Request(baidu_pic_url, meta={"search_word": search_word}, callback=self.get_pic, dont_filter=True)
def get_pic(self, response): # 從圖片list中獲取每個pic的信息
item = PicItem() # 實例化item
response_json = response.text # 存儲返回的json數據
response_dict = json.loads(response_json) # 轉化為字典
response_dict_data = response_dict['data'] # 圖片的有效數據在data參數中
for pic in response_dict_data: # pic為每個圖片的信息數據,dict類型
if pic:
item['search_word'] = response.meta['search_word'] # 搜索關鍵詞賦值
item['pic_url'] = [pic['middleURL']] # 百度圖片搜索結果url (setting中pic_url應該為數組形式)
item['pic_name'] = pic['fromPageTitleEnc'] # 百度圖片搜索結果對應的title
yield item
新建main.py文件,方便在pycharm中運行和調試爬蟲。
main.py
# _*_ coding: utf-8 _*_
from scrapy.cmdline import execute
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__))) #設置工程目錄
print(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","pic_spider"]).strip()
定義item字段
item.py
# -*- coding: utf-8 -*-
import scrapy
class PicItem(scrapy.Item) :
search_word = scrapy.Field() #搜索關鍵字
pic_name = scrapy.Field() #圖片標題
pic_url = scrapy.Field() #圖片url
pass
定義pipeline
pipeline.py
# -*- coding: utf-8 -*-
class PicspiderPipeline(object):
def process_item(self, item, spider):
return item
在setting中對應部分修改ITEM_PIPELINES,并增加圖片處理代碼
settings.py
ITEM_PIPELINES = {
'PicSpider.pipelines.PicspiderPipeline': 300,
'scrapy.pipelines.images.ImagesPipeline' : 1,
}
#配置pipeline,設定需要進行處理的圖片路徑
IMAGES_URLS_FIELD = "pic_url"
# 設置圖片下載后的存儲路徑,放到工程目錄下images文件夾
# 獲取當前目錄絕對路徑
project_dir = os.path.abspath(os.path.dirname(__file__))
# 獲取images存儲路徑
IMAGES_STORE = os.path.join(project_dir,'images')
# 設定處理圖片的最小高度,寬度
IMAGES_MIN_HEIGHT = 100
IMAGES_MIN_WIDTH = 100
運行
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态