scrapy爬取小說 三

2021-09-11 03:31:29 字數 2795 閱讀 4934

根據上章scrapy爬取**(二)

爬取的**的章節是亂序的,所以需要章節排序。

使用item和pipeline對最終結果排序

修改items.py檔案

import scrapy

class novelitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

num = scrapy.field()

name = scrapy.field()

content = scrapy.field()

修改yuanzun.py檔案

import scrapy

from novel.items import novelitem

class yuanzun(scrapy.spider):

name = "yuanzun"

start_urls = ['']

def parse(self, response):

# 獲取所有子頁面

for quote in response.css("div#list dd a"):

next_page = quote.css("a::attr(href)").get()

if next_page is not none:

yield response.follow(next_page, self.parse_content)

# 抽取每個頁面的標題和內容

def parse_content(self, response):

item = novelitem()

item['name'] = response.css("div.bookname h1::text").get()

item['content'] = response.css("div#content::text").getall()

yield item

返回結果為novelitem類

修改pipelines.py檔案

# -*- coding: utf-8 -*-

# define your item pipelines here

## don't forget to add your pipeline to the item_pipelines setting

# see:

import re

class novelpipeline(object):

def __init__(self):

self.num_enum =

self.multi_cov =

self.content_list =

def open_spider(self, spider):

self.file = open('yuanzun.txt', 'w')

def process_item(self, item, spider):

name = item['name']

chapter = re.findall(r"第(.*)章", name)[0]

item['num'] = self.change2num(chapter)

return item

def close_spider(self, spider):

list_sorted = sorted(self.content_list, key=lambda x: x['num'])

for item in list_sorted:

self.file.write("----------------%d------------------ %s--------------\n" % (item['num'], item['name']))

self.file.write(''.join(item['content']).replace('\xa0', '') + "\n")

self.file.close()

#章節數字轉換

def change2num(self, name):

m = 0

mc = 1

rev_name = name[::-1]

for t_str in rev_name:

if t_str in self.num_enum:

m += self.num_enum[t_str] * mc

if t_str in self.multi_cov:

mc = self.multi_cov[t_str]

# 第十二章,第十章特例

if name[0] == '十':

m += 10

return m

說明:change2num是自定義的方法,例如將「一百二十五」轉換為數字125,

process_item方法是講每個novelitem的name的中文數字抽取出來。

close_spider儲存檔案時候,將按num從小到大排序儲存。

在settings.py取消item_pipelines的註解

item_pipelines =
執行命令

scrapy crawl yuanzun
檢視yuanzun.txt檔案,章節是有序的。

**位址

scrapy 爬取小說

速度是相當的快的 爬取整站的 最後結果儲存至mongodb資料庫 pycharm開發還是很好用的 建立專案 scrapy startproject daomubiji 執行專案 scrapy crawl daomubi settings default request headers items t...

scrapy爬取百萬小說

爬取 實列 第一步 建立乙個scrapy工程 命令列中輸入scrapy startproject demo 第二步 進入這個工程中,建立乙個爬蟲 scrapy nss zhuangji.org nss檔案 第三部 在spiders中進入到這個nss.py這個檔案 i 出現乙個nssspider類 s...

使用scrapy爬取長安有妖氣小說

目標 注意檢視位址最後的,有規律。3103 2998 1 106,但是有三章位址是重複的,所有實際有103個位址,103個章節,正好符合目錄列表,多餘的這三個章節等爬取下來後再手動刪除 scrapy startproject quotetutorial cd quotetutorial scrapy...