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

python爬蟲scrapy圖書分類實例講解

 更新時間:2020年11月23日 14:14:15   作者:小妮淺淺  
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲scrapy圖書分類實例講解內(nèi)容,需要的朋友們可以參考下。

我們?nèi)D書館的時候,會直接去自己喜歡的分類欄目找尋書籍。如果其中的分類不是很細(xì)致的話,想找某一本書還是有一些困難的。同樣的如果我們獲取了一些圖書的數(shù)據(jù),原始的文件里各種數(shù)據(jù)混雜在一起,非常不利于我們的查找和使用。所以今天小編教大家如何用python爬蟲中scrapy給圖書分類,大家一起學(xué)習(xí)下:

spider抓取程序:

在貼上代碼之前,先對抓取的頁面和鏈接做一個分析:

網(wǎng)址:http://category.dangdang.com/pg4-cp01.25.17.00.00.00.html

這個是當(dāng)當(dāng)網(wǎng)圖書的鏈接,經(jīng)過分析發(fā)現(xiàn):大種類的id號對應(yīng) cp01.25 中的25,小種類對應(yīng)id號中的第三個 17,pg4代表大種類 —>小種類下圖書的第17頁信息。

為了在抓取圖書信息的同時找到這本圖書屬于哪一大種類下的小種類的歸類信息,我們需要分三步走,第一步:大種類劃分,在首頁找到圖書各大種類名稱和對應(yīng)的id號;第二步,根據(jù)大種類id號生成的鏈接,找到每個大種類下的二級子種類名稱,及對應(yīng)的id號;第三步,在大種類 —>小種類的歸類下抓取每本圖書信息。

分步驟介紹下:

1、我們繼承RedisSpider作為父類,start_urls作為初始鏈接,用于請求首頁圖書數(shù)據(jù)

# -*- coding: utf-8 -*-
import scrapy
import requests
from scrapy import Selector
from lxml import etree
from ..items import DangdangItem
from scrapy_redis.spiders import RedisSpider
 
class DangdangSpider(RedisSpider):
  name = 'dangdangspider'
  redis_key = 'dangdangspider:urls'
  allowed_domains = ["dangdang.com"]
  start_urls = 'http://category.dangdang.com/cp01.00.00.00.00.00.html'
  def start_requests(self):
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
           Safari/537.36 SE 2.X MetaSr 1.0'
    headers = {'User-Agent': user_agent}
    yield scrapy.Request(url=self.start_urls, headers=headers, method='GET', callback=self.parse)

2、在首頁中抓取大種類的名稱和id號,其中yield回調(diào)函數(shù)中傳入的meta值為本次匹配出的大種類的名稱和id號

def parse(self, response):
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
           Safari/537.36 SE 2.X MetaSr 1.0'
    headers = {'User-Agent': user_agent}
    lists = response.body.decode('gbk')
    selector = etree.HTML(lists)
    goodslist = selector.xpath('//*[@id="leftCate"]/ul/li')
    for goods in goodslist:
      try:
        category_big = goods.xpath('a/text()').pop().replace('  ','') # 大種類
        category_big_id = goods.xpath('a/@href').pop().split('.')[1]  # id
        category_big_url = "http://category.dangdang.com/pg1-cp01.{}.00.00.00.00.html".\
                 format(str(category_big_id))
        # print("{}:{}".format(category_big_url,category_big))
        yield scrapy.Request(url=category_big_url, headers=headers,callback=self.detail_parse,
                   meta={"ID1":category_big_id,"ID2":category_big})
      except Exception:
        Pass

3、根據(jù)傳入的大種類的id號抓取每個大種類下的小種類圖書標(biāo)簽,yield回調(diào)函數(shù)中傳入的meta值為大種類id號和小種類id號

def detail_parse(self, response):
    ID1:大種類ID  ID2:大種類名稱  ID3:小種類ID ID4:小種類名稱
    url = 'http://category.dangdang.com/pg1-cp01.{}.00.00.00.00.html'.format(response.meta["ID1"])
    category_small = requests.get(url)
    contents = etree.HTML(category_small.content.decode('gbk'))
    goodslist = contents.xpath('//*[@class="sort_box"]/ul/li[1]/div/span')
    for goods in goodslist:
      try:
        category_small_name = goods.xpath('a/text()').pop().replace(" ","").split('(')[0]
        category_small_id = goods.xpath('a/@href').pop().split('.')[2]
        category_small_url = "http://category.dangdang.com/pg1-cp01.{}.{}.00.00.00.html".\
                 format(str(response.meta["ID1"]),str(category_small_id))
        yield scrapy.Request(url=category_small_url, callback=self.third_parse, meta={"ID1":response.meta["ID1"],\
            "ID2":response.meta["ID2"],"ID3":category_small_id,"ID4":category_small_name})
 
        # print("============================ {}".format(response.meta["ID2"])) # 大種類名稱
        # print(goods.xpath('a/text()').pop().replace(" ","").split('(')[0])  # 小種類名稱
        # print(goods.xpath('a/@href').pop().split('.')[2])  # 小種類ID
      except Exception:
        Pass

4、抓取各大種類——>小種類下的圖書信息

def third_parse(self,response):
    for i in range(1,101):
      url = 'http://category.dangdang.com/pg{}-cp01.{}.{}.00.00.00.html'.format(str(i),response.meta["ID1"],\
                                           response.meta["ID3"])
      try:
        contents = requests.get(url)
        contents = etree.HTML(contents.content.decode('gbk'))
        goodslist = contents.xpath('//*[@class="list_aa listimg"]/li')
        for goods in goodslist:
          item = DangdangItem()
          try:
            item['comments'] = goods.xpath('div/p[2]/a/text()').pop()
            item['title'] = goods.xpath('div/p[1]/a/text()').pop()
            item['time'] = goods.xpath('div/div/p[2]/text()').pop().replace("/", "")
            item['price'] = goods.xpath('div/p[6]/span[1]/text()').pop()
            item['discount'] = goods.xpath('div/p[6]/span[3]/text()').pop()
            item['category1'] = response.meta["ID4"]    # 種類(小)
            item['category2'] = response.meta["ID2"]    # 種類(大)
          except Exception:
            pass
          yield item
      except Exception:
        pass

到此這篇關(guān)于python爬蟲scrapy圖書分類實例講解的文章就介紹到這了,更多相關(guān)python爬蟲中scrapy如何給圖書分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)k-means聚類算法

    python實現(xiàn)k-means聚類算法

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)k-means聚類算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Pycharm安裝scrapy及初始化爬蟲項目的完整步驟

    Pycharm安裝scrapy及初始化爬蟲項目的完整步驟

    因為入門python以來一直使用pycharm,所以對著黑白的DOS不習(xí)慣,所以此次來實現(xiàn)使用pycharm進行實現(xiàn)使用scrapy框架,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝scrapy及初始化爬蟲項目的完整步驟,需要的朋友可以參考下
    2022-08-08
  • 解決python3 urllib 鏈接中有中文的問題

    解決python3 urllib 鏈接中有中文的問題

    今天小編就為大家分享一篇解決python3 urllib 鏈接中有中文的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python實現(xiàn)學(xué)生管理系統(tǒng)的示例代碼

    Python實現(xiàn)學(xué)生管理系統(tǒng)的示例代碼

    學(xué)生管理系統(tǒng)是一個常見的應(yīng)用程序,它可以幫助學(xué)校、教育機構(gòu)或教師管理學(xué)生的信息,本文將介紹如何利用Python開發(fā)一個學(xué)生管理系統(tǒng),需要的可以參考一下
    2023-07-07
  • python中數(shù)組和矩陣乘法及使用總結(jié)(推薦)

    python中數(shù)組和矩陣乘法及使用總結(jié)(推薦)

    這篇文章主要介紹了python中數(shù)組和矩陣乘法及使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python3中小括號()、中括號[]、花括號{}的區(qū)別詳解

    Python3中小括號()、中括號[]、花括號{}的區(qū)別詳解

    這篇文章主要介紹了Python3中小括號()、中括號[]、花括號{}的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python判斷for循環(huán)最后一次的6種方法

    Python判斷for循環(huán)最后一次的6種方法

    在Python中,通常我們不會直接判斷for循環(huán)是否正在執(zhí)行最后一次迭代,因為Python的for循環(huán)是基于可迭代對象的,它不知道也不關(guān)心迭代的內(nèi)部狀態(tài)(比如當(dāng)前是第幾次迭代),但是,我們可以使用一些技巧來間接地實現(xiàn)這個需求,需要的朋友可以參考下
    2025-01-01
  • 刪除pandas中產(chǎn)生Unnamed:0列的操作

    刪除pandas中產(chǎn)生Unnamed:0列的操作

    這篇文章主要介紹了刪除pandas中產(chǎn)生Unnamed:0列的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python代碼打包工具cx_Freeze的安裝及用法詳解

    python代碼打包工具cx_Freeze的安裝及用法詳解

    cx_Freeze是一個流行的Python庫,它可以將Python腳本及其依賴項打包成獨立的可執(zhí)行文件,支持多平臺(如Windows、Linux和macOS),本文將結(jié)合實際案例,詳細(xì)介紹cx_Freeze的安裝、配置和使用方法,需要的朋友可以參考下
    2024-08-08
  • Django項目uwsgi+Nginx保姆級部署教程實現(xiàn)

    Django項目uwsgi+Nginx保姆級部署教程實現(xiàn)

    這篇文章主要介紹了Django項目uwsgi+Nginx保姆級部署教程實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

阳西县| 偃师市| 陆河县| 江城| 九台市| 新巴尔虎右旗| 长阳| 华宁县| 尼木县| 建湖县| 大田县| 临海市| 青神县| 苗栗市| 宁南县| 云林县| 喀喇| 石柱| 六安市| 吴桥县| 临西县| 南通市| 方城县| 大邑县| 山阳县| 江北区| 朝阳县| 辽阳县| 安泽县| 黄大仙区| 上虞市| 富锦市| 临清市| 电白县| 仪陇县| 泗水县| 洛隆县| 钟祥市| 新巴尔虎左旗| 榆林市| 常州市|