Python爬虫实战之使用Scrapy爬起点网的完本小说

一.概述
本篇的目的是用scrapy来爬取起点小说网的完本小说,使用的环境ubuntu,至于scrapy的安装就自行百度了.
二.创建项目
scrapy startproject name 通过终端进入到你创建项目的目录下输入上面的命令就可以完成项目的创建.name是项目名字.
三.item的编写
我这里定义的item中的title用来存书名,desc用来存书的内容.

import scrapy


class TutorialItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    desc = scrapy.Field()
    pass

四.pipelines的编写
在pipelines可以编写存储数据的形式,我这里就是使用txt形式的文件来存储每一本书


import json
import codecs

#以txt的形式存储
class TutorialPipeline(object):
    #def __init__(self):

    def process_item(self, item, spider):
         //根据书名来创建文件,item.get('title')就可以获取到书名
        self.file = codecs.open(item.get('title')+'.txt', 'w', encoding='utf-8')
        self.file.write(item.get("desc")+ "\n")
        return item

    def spider_closed(self, spider):
        self.file.close()

五.Setting的编写

只要将下面代码中的tutorial替换成自己项目的名字就可以
BOT_NAME = 'tutorial'
#USER_AGENT
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'
# start MySQL database configure setting

# end of MySQL database configure setting

SPIDER_MODULES = ['tutorial.spiders']
NEWSPIDER_MODULE = 'tutorial.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'tutorial (+http://www.yourdomain.com)'
ITEM_PIPELINES = {
    'tutorial.pipelines.TutorialPipeline': 300,

}

六.spider的编写

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import TutorialItem
from scrapy.http import Request


class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    //我这里是下载起点体育类的完本小说,所以通过for来创建每一个页面的url,因为每一个只是page不同而已,而page是根据全部的本数/页数而来
    start_urls = [
        "http://fin.qidian.com/?size=-1&sign=-1&tag=-1&chanId=8&subCateId=-1&orderId=&update=-1&page="+str(page)+"&month=-1&style=1&vip=-1" for page in range(1,292/20)
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        //获取每一个书的url
        book =hxs.select('//div[@class="book-mid-info"]/h4/a//@href').extract()

        for bookurl in book:
            //根据获取到的书本url跳转到每本书的页面
          yield Request("http:"+bookurl, self.parseBook, dont_filter=True)


    def parseBook(self,response):
        hxs = HtmlXPathSelector(response)
        //获取免费阅读的url
        charterurl = hxs.select('//div[@class="book-info "]//a[@class="red-btn J-getJumpUrl "]/@href').extract()
         //每一本书都创建一个item
        item = TutorialItem()
        for url in charterurl:
            通过免费阅读的url进入书的第一章
            yield Request("http:"+url,meta={'item': item},callback=self.parseCharter, dont_filter=True)


    def parseCharter(self ,response):
        hxs = HtmlXPathSelector(response)
        //获取书名
        names = hxs.select('//div[@class="info fl"]/a[1]/text()').extract()
        //获取上面传递过来的item
        item = response.meta['item']
        for name in names:
          //将书名存入到item的title字段中
            names = item.get('title')
            if None==names:
                item['title'] = name
        //获取章节名
        biaoti = hxs.select('//h3[@class="j_chapterName"]/text()').extract()
        content = ''
        for biaot in biaoti:
            content=content+biaot+"\n"
            //获取每一章的内容
        s = hxs.select('//div[@class="read-content j_readContent"]//p/text()').extract()
        for srt in s:
        //将章节和内容拼接起来存入到item的desc中
            content = content + srt
        desc = item.get('desc')
        if None==desc:
            item['desc'] =content
        else:
           item['desc']=desc+content
        if content=='':
            yield item


        #获取下一章的内容
        chapters = hxs.select('//div[@class="chapter-control dib-wrap"]/a[@id="j_chapterNext"]//@href').extract()
        for chapter in chapters:
            #print "https:" + chapter
          yield Request("http:" + chapter, meta={'item': item},callback=self.parseCharter, dont_filter=True)

七.总结
通过上面的代码虽然可以获取所有书的内容,但是起点是有vip限制的,也就是说必须用起点的vip帐号登录才能查看完本的小说,因此这有点遗憾,我没有起点小说网的会员.

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值