91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python編程scrapy簡單代碼如何實現搜狗圖片下載器

發布時間:2021-11-15 09:08:46 來源:億速云 閱讀:170 作者:小新 欄目:開發技術

這篇文章主要介紹了python編程scrapy簡單代碼如何實現搜狗圖片下載器,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

目標站點說明

這次要采集的站點為搜狗圖片頻道,該頻道數據由接口直接返回,接口如下:

https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=10&len=10
https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=20&len=10

其中只有 start 參數在發生變化,所以實現起來是比較簡單的。

編寫核心爬蟲文件

import scrapy
class SgSpider(scrapy.Spider):
    name = 'sg'
    allowed_domains = ['pic.sogou.com']
    base_url = "https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start={}&len=10"
    start_urls = [base_url.format(0)]
    def parse(self, response):
        json_data = response.json()
        if json_data is not None:
            img_list = json_data["data"]["list"]
            for img in img_list:
                yield {'image_urls': [_["originImage"] for _ in img[0]["picList"]]}
        else:
            return None

上述代碼直接調用了第一頁的接口數據,后續代碼都是在對JSON數據中的圖片地址進行提取。

其中最重要的一行代碼如下:

yield {'image_urls': [_["originImage"] for _ in img[0]["picList"]]}

這里的 image_urls 是為了調用 scrapy 內置的圖片下載中間件,固定的參數。

settings.py
該文件也需要進行修改,具體細節如下所示:

# 用戶代理設置
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# 下載間隔設置為 3 秒
DOWNLOAD_DELAY = 3
# 默認請求頭
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'HOST': 'pic.sogou.com',
}
# 開啟 ImagesPipeline 圖片保存管道
ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
# 圖片存儲文件夾
IMAGES_STORE = "images"

運行代碼圖片就會自動進行下載,保存到 images 目錄中,下載完畢輸出如下信息,本次僅采集第一頁數據,顧得到40張圖片。

python編程scrapy簡單代碼如何實現搜狗圖片下載器

如果你代碼運行之后,沒有下載到目標圖片,請確定是否出現如下BUG。

ImagesPipeline requires installing Pillow 4.0.0

解決辦法非常簡單,安裝 Pillow 庫即可。

還存在一個問題是文件名是動態的,看起來有點亂。

python編程scrapy簡單代碼如何實現搜狗圖片下載器

pipelines.py 文件中增加一個自定義文件名稱的數據管道。

class SogouImgPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        name = item["name"]
        for index, url in enumerate(item["image_urls"]):
            yield Request(url, meta={'name': name, 'index': index})
    def file_path(self, request, response=None, info=None):
        # 名稱
        name = request.meta['name']
        # 索引
        index = request.meta['index']
        filename = u'{0}_{1}.jpg'.format(name, index)
        print(filename)
        return filename

上述代碼的主要功能是重新命名了圖片文件名,下面同步修改 SgSpider 類中的相關代碼。

def parse(self, response):
    json_data = response.json()
    if json_data is not None:
        img_list = json_data["data"]["list"]
        for img in img_list:
            yield {
                'name': img[0]['title'],
                'image_urls': [_["originImage"] for _ in img[0]["picList"]],
            }
    else:
        return None

再次運行代碼,圖片保存之后,文件名就變得易識別了許多。

python編程scrapy簡單代碼如何實現搜狗圖片下載器

最后補全下一頁的邏輯即可實現本案例啦,這一步驟留給你來完成。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“python編程scrapy簡單代碼如何實現搜狗圖片下載器”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍林郭勒市| 方城县| 千阳县| 嘉鱼县| 定日县| 绥中县| 平凉市| 洛浦县| 百色市| 南京市| 宁城县| 正定县| 巴马| 长兴县| 赣州市| 保亭| 夏津县| 特克斯县| 元谋县| 长泰县| 彭州市| 曲阜市| 托克托县| 湄潭县| 福贡县| 饶河县| 远安县| 丽江市| 舟曲县| SHOW| 舞阳县| 广南县| 永德县| 开封市| 三门峡市| 盘山县| 镇沅| 凤山市| 锡林浩特市| 建始县| 彭水|