爬蟲(chóng)系列(二十三):手機(jī)App抓包爬蟲(chóng)

1. items.py

    class DouyuspiderItem(scrapy.Item):
        name = scrapy.Field()# 存儲(chǔ)照片的名字
        imagesUrls = scrapy.Field()# 照片的url路徑
        imagesPath = scrapy.Field()# 照片保存在本地的路徑

2. spiders/douyu.py

import scrapy
import json
from douyuSpider.items import DouyuspiderItem

class DouyuSpider(scrapy.Spider):
    name = "douyu"
    allowd_domains = ["http://capi.douyucdn.cn"]

    offset = 0
    url = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
    start_urls = [url + str(offset)]

  def parse(self, response):
      # 返回從json里獲取 data段數(shù)據(jù)集合
      data = json.loads(response.text)["data"]

      for each in data:
          item = DouyuspiderItem()
          item["name"] = each["nickname"]
          item["imagesUrls"] = each["vertical_src"]

          yield item

      self.offset += 20
      yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

3. 設(shè)置setting.py

ITEM_PIPELINES = {'douyuSpider.pipelines.ImagesPipeline': 1}

# Images 的存放位置,之后會(huì)在pipelines.py里調(diào)用
IMAGES_STORE = "/Users/Power/lesson_python/douyuSpider/Images"

# user-agent
USER_AGENT = 'DYZB/2.290 (iPhone; iOS 9.3.4; Scale/2.00)'

4. pipelines.py

    import scrapy
    import os
    from scrapy.pipelines.images import ImagesPipeline
    from scrapy.utils.project import get_project_settings

    class ImagesPipeline(ImagesPipeline):
        IMAGES_STORE = get_project_settings().get("IMAGES_STORE")

        def get_media_requests(self, item, info):
            image_url = item["imagesUrls"]
            yield scrapy.Request(image_url)

        def item_completed(self, results, item, info):
            # 固定寫(xiě)法,獲取圖片路徑,同時(shí)判斷這個(gè)路徑是否正確,如果正確,就放到 image_path里,ImagesPipeline源碼剖析可見(jiàn)
            image_path = [x["path"] for ok, x in results if ok]

            os.rename(self.IMAGES_STORE + "/" + image_path[0], self.IMAGES_STORE + "/" + item["name"] + ".jpg")
            item["imagesPath"] = self.IMAGES_STORE + "/" + item["name"]

            return item

    #get_media_requests的作用就是為每一個(gè)圖片鏈接生成一個(gè)Request對(duì)象,這個(gè)方法的輸出將作為item_completed的輸入中的results,results是一個(gè)元組,每個(gè)元組包括(success, imageinfoorfailure)。如果success=true,imageinfoor_failure是一個(gè)字典,包括url/path/checksum三個(gè)key。

在項(xiàng)目根目錄下新建main.py文件,用于調(diào)試

from scrapy import cmdline
  cmdline.execute('scrapy crawl douyu'.split())

執(zhí)行程序

 py2 main.py
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 安裝scrapy: pip3 install -i https://pypi.douban.com/simple/...
    眼君閱讀 11,861評(píng)論 10 33
  • Words and expressions 1.Expensive 不能用來(lái)形容價(jià)格的高低,價(jià)格高低可以用high...
    Donutzpj閱讀 300評(píng)論 0 0
  • 對(duì)于日本文學(xué),我往往是聽(tīng)說(shuō)多過(guò)看過(guò),非要說(shuō)品讀,應(yīng)該只有高中時(shí)從朋友那里借過(guò)來(lái)看的吉本芭娜娜的廚房罷了。 很溫柔。...
    李彧cic閱讀 559評(píng)論 1 4
  • 我要談一場(chǎng)永不分手的戀愛(ài)彼此忠貞 彼此信任 戰(zhàn)得勝時(shí)間 抵得住流年 經(jīng)得起離別 受得住想念 盛年錦時(shí) 心無(wú)二致 年...
    小怪獸崔蛋閱讀 377評(píng)論 0 0
  • 我知道有那么一天,我終將死去。 無(wú)論從哪個(gè)角度回憶我的童年,最讓人記憶猶新的依然是那個(gè)畫(huà)面。屋前是陪伴我長(zhǎng)大的那條...
    蘭十三閱讀 435評(píng)論 0 0

友情鏈接更多精彩內(nèi)容