scrapy学习笔记-爬取免费的小说
1.爬取任务分析
1-1.爬虫入口
这里选择的爬虫入口是小说的分类页面如下:
那么我确定一下爬虫进入的规则:
分类入口页面->小说列表页面->小说简介页面
再确定一下item内容的提取页面
小说简介页面->开始阅读关联页面
开始阅读关联页面 -> 小说翻页
1-2.编写正则表达式
分类详情页面
(\w+):\/\/m.xiaoqiangxs.org\/(sort)\/\d{1}_\d{1}
介绍页面
(\w+):\/\/m.xiaoqiangxs.org\/\d+_\d+\/$
具体的小说内容页面
(\w+):\/\/m.xiaoqiangxs.org\/\d+_\d+\/(\d+|\d+_\d+)(.html)
这里为了防止爬取到每一章的第一页而导致上一页的uri和开始阅读的uri不同,无法被过滤,而导致重复出现的问题需要禁用我们的每一章的第一个页面的上一页
(\w+):\/\/m.xiaoqiangxs.org\/\d+_\d+\/(\d+_1)(.html)
1-3.根据我们需要的内容指定我们的item
import scrapy
from scrapy import Field
class TxtItem(scrapy.Item):
# 小说的名称
txt_name = Field()
# 章节名称
chapter_name = Field()
# 章节ID
chapter_id = Field()
# 小说种类
txt_type = Field()
# 页码
chapter_page = Field()
# 当前页面的内容
chapter_detail = Field()
# 小说的ID
txt_id = Field()
2.爬取代码编写
2-1.生成蜘蛛项目
scrapy startproject xiaoshuo
cd xiaoshuo
scrapy genspider -t crawl crapy m.xiaoqiangxs.org
2-2.编写蜘蛛
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Selector
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import TxtItem
import re
import html
#定位到小说的分类页面 和 小说的介绍页,进行深入。
type_fiction = ('(\w+):\/\/m.xiaoqiangxs.org\/(sort)\/\d{1}_\d{1}','(\w+):\/\/m.xiaoqiangxs.org\/\d+_\d+\/$')
#小说内容提取
chapter_rex = '<article.*?id="nr">(.*?)</article>'
#所有的小说
all_txt ='http://m.xiaoqiangxs.org/sort/'
#具