scrapy爬取纵横小说网所有小说信息

这篇博客介绍了如何使用Scrapy框架创建一个爬虫项目,以爬取纵横中文网的小说信息。首先通过`scrapystartproject`命令创建项目,然后在项目内生成爬虫,接着完善`Spider`类,解析书籍的书名、作者、分类和简介。同时,实现了列表页的翻页逻辑,获取下一页URL。在`settings.py`中配置启用Pipeline。最后提醒读者在爬取时注意频率,避免对服务器造成过大压力。
摘要由CSDN通过智能技术生成

创建scrapy项目

创建scrapy项目的命令:scrapy startproject +<项目名字>
scrapy startproject zongheng

创建爬虫

命令:在项目路径下执行:scrapy genspider +<爬虫名字> + <允许爬取的域名>

示例:

cd zongheng
scrapy genspider book zongheng.com

生成的目录和文件结果如下:
在这里插入图片描述

完善spider

在zongheng.py中修改内容如下:

import re

import scrapy


class BookSpider(scrapy.Spider):
    name = 'book'
    allowed_domains = ['zongheng.com']
    start_urls = ['http://book.zongheng.com/store.html']

    def parse(self, response):
        divs = response.xpath('//div[@class="bookinfo"]')
        for div in divs:
            item = {}
            item['书名'] = div.xpath('./div/a/text()').extract_first()
            item['作者'] = div.xpath('./div[2]/a/text()').extract_first()
            item['书籍分类'] = div.xpath('./div[2]/a[2]/text()').extract_first()
            item['简介'] = div.xpath('./div[3]/text()').extract_first()
            yield item

        # 列表下一页获取
        # 获取当前页的页号
        current_page = int(re.findall('page="(\d+)"', response.text)[0])
        # 获取总的页码数
        page_numbers = int(re.findall('count="(\d+)"', response.text)[0])
        # 计算下一页的页号
        next_page = current_page + 1
        # 如果下一页的页号小于总页码数, 就说明有下一页, 那么就根据这个页号生成下一页的URL
        if next_page < page_numbers:
            s = 'store/c0/c0/b0/u0/p{}/v9/s9/t0/u0/i1/ALL.html'.format(next_page)
            next_url = 'http://book.zongheng.com/' + s
            print(next_url)
            yield scrapy.Request(next_url, callback=self.parse)

在settings.py设置开启pipeline

ITEM_PIPELINES = {
    # 键(key)  完整类名: 模块.类名
    # 值(优先级): 是一个0-1000的整数, 越小越先执行
    'zongheng.pipelines.ZonghengPipeline': 400

#浏览器请求头
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'

初学爬虫,终极目标爬小说内容,最后,大家不要访问的太频繁了,服务器挂了不要找我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值