python爬虫-爬取盗墓笔记

  本来今天要继续更新 scrapy爬取美女图片 系列文章,可是发现使用免费的代理ip都非常不稳定,有时候连接上,有时候连接不上,所以我想找到稳定的代理ip,下次再更新  scrapy爬取美女图片之应对反爬虫  文章。

好了,废话不多说,咱们进入今天的主题。这一篇文章是关于爬取盗墓笔记,主要技术要点是scrapy的使用,scrapy框架中使用mongodb数据库,文件的保存。

   这次爬取的网址是  http://seputu.com/。之前也经常在上面在线看盗墓笔记。

    按照咱们之前的学习爬虫的做法,使用firebug审查元素,查看如何解析html。

这次咱们要把书的名称,章节,章节名称,章节链接抽取出来,存储到数据库中,同时将文章的内容提取出来存成txt文件。

   看一下html结构就会发现这个页面结构非常分明,标题的html节点是  div class = ‘‘mulu-title",章节的节点是 div class= "box" ,每一章的节点是 div class= "box"中的<li>标签。

然后咱们将第一章的链接 http://seputu.com/biji1/1.html打开,上面就是文章的内容。

   可以看到文章的内容是使用 div class ="content-body"中的<p>标签包裹起来的,总体来说提取难度挺小。

打开cmd,输入scrapy startproject daomubiji,这时候会生成一个工程,然后我把整个工程复制到pycharm中

  

上图就是工程的结构。

DaomubijiSpider.py ------Spider 蜘蛛

items.py -----------------对要爬取数据的模型定义

pipelines.py-------------处理要存储的数据(存到数据库和写到文件)

settings.py----------------对Scrapy的配置

main.py -------------------启动爬虫

test.py -------------------- 测试程序(不参与整体运行)

下面将解析和存储的代码贴一下,完整代码已上传到github:https://github.com/qiyeboy/daomuSpider。

DaomubijiSpider.py (解析html)
#coding:utf-8
import scrapy
from scrapy.selector import Selector
from daomubiji.items import DaomubijiItem

class daomuSpider(scrapy.Spider):
    name = "daomu"
    allowed_domains = ["seputu.com"]
    start_urls = ["http://seputu.com/"]
    ‘‘.split()

    def parse(self, response):
        selector = Selector(response)
        mulus= selector.xpath("//div[@class=‘mulu‘]/div[@class=‘mulu-title‘]/center/h2/text()").extract()#将目录提取出来
        boxs = selector.xpath("//div[@class=‘mulu‘]/div[@class=‘box‘]")#.extract()
        for i in range(len(mulus)):
            mulu = mulus[i]#提取出来一个目录
            box = boxs[i]#提取出来一个box
            texts = box.xpath(".//ul/li/a/text()").extract()#将文本提取出来
            urls  = box.xpath(".//ul/li/a/@href").extract()#将链接提取出来
            for j in range(len(urls)):
                item = DaomubijiItem()
                item[‘bookName‘] = mulu
                try:
                    item[‘bookTitle‘] = texts[j].split(‘ ‘)[0]
                    item[‘chapterNum‘] = texts[j].split(‘ ‘)[1]
                    item[‘chapterName‘] = texts[j].split(‘ ‘)[2]
                    item[‘chapterUrl‘] = urls[j]
                    request = scrapy.Request(urls[j],callback=self.parseBody)
                    request.meta[‘item‘] = item
                    yield request

                except Exception,e:
                    print ‘excepiton‘,e
                    continue

    def parseBody(self,response):
        ‘‘‘
        解析小说章节中的内容
        :param response:
        :return:
        ‘‘‘
        item = response.meta[‘item‘]
        selector = Selector(response)

        item[‘chapterContent‘] =‘\r\n‘.join(selector.xpath("//div[@class=‘content-body‘]/p/text()").extract())
        yield item

  

   pipelines.py:(处理要存储的数据)

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

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import os
from scrapy.pipelines.files import FilesPipeline
from daomubiji import settings
from pymongo import MongoClient

class DaomubijiPipeline(object):
    def process_item(self, item, spider):#将小说进行存储
        dir_path = ‘%s/%s/%s‘%(settings.FILE_STORE,spider.name,item[‘bookName‘]+‘_‘+item[‘bookTitle‘])#存储路径
        print ‘dir_path‘,dir_path
        if not os.path.exists(dir_path):
            os.makedirs(dir_path)
        file_path = ‘%s/%s‘%(dir_path,item[‘chapterNum‘]+‘_‘+item[‘chapterName‘]+‘.txt‘)
        with open(file_path,‘w‘) as file_writer:
            file_writer.write(item[‘chapterContent‘].encode(‘utf-8‘))
            file_writer.write(‘\r\n‘.encode(‘utf-8‘))

        file_writer.close()
        return item

class DaomuSqlPipeline(object):

    def __init__(self):
    #连接mongo数据库,并把数据存储
        client = MongoClient()#‘mongodb://localhost:27017/‘///‘localhost‘, 27017///‘mongodb://tanteng:[email protected]:27017/‘
        db = client.daomu
        self.books = db.books

    def process_item(self, item, spider):
        print ‘spider_name‘,spider.name
        temp ={‘bookName‘:item[‘bookName‘],
               ‘bookTitle‘:item[‘bookTitle‘],
               ‘chapterNum‘:item[‘chapterNum‘],
               ‘chapterName‘:item[‘chapterName‘],
               ‘chapterUrl‘:item[‘chapterUrl‘]
               }
        self.books.insert(temp)

        return item

  

    接下来切换到main.py所在目录,运行python main.py启动爬虫。

         没过几分钟,爬虫就结束了,咱们看一下爬取的数据和文件。

    

       数据库数据:

  

  今天的分享就到这里,如果大家觉得还可以呀,记得推荐呦。

欢迎大家支持我公众号:

本文章属于原创作品,欢迎大家转载分享。尊重原创,转载请注明来自:七夜的故事 http://www.cnblogs.com/qiyeboy/

时间: 2024-11-05 11:53:51

python爬虫-爬取盗墓笔记的相关文章

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取美女图片

python 爬虫爬取美女图片 #coding=utf-8 import urllib import re import os import time import threading def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImgUrl(html,src): srcre = re.compile(src) srclist = re.findall(srcre,html)

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

用Python爬虫爬取广州大学教务系统的成绩(内网访问)

用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是"选择器"."选择器"指明了{}中的"样式"的作用对象,也就是"样式"作用于网页中的哪些元素.可参考:http://www.w3school.com.cn/cssref/css_selectors.asph

python爬虫—爬取英文名以及正则表达式的介绍

python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv文件中:再读取csv文件当中的每个英文名链接,采用循环的方法读取每一个英文名链接,根据每个英文名链接爬取每个链接中的数据,保存在新的csv文件当中. 需要写一个爬取英文名链接的函数.将爬取的内容保存在csv文件的函数以及读取csv文件内容的函数.爬取英文名详情页内容的函数. 表5.3.1 函数名

python爬虫爬取微博评论案例详解

这篇文章主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 数据格式:{"name":评论人姓名,"comment_time":评论时间,"comment_info":评论内容,"comment_url":评论人的主页} 以上就是我们需要的信息. 具体操作流程: 我们首相将主页获取完成以后,我们就会发现,其中 的内容带有相

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

Python爬虫爬取一篇韩寒新浪博客

网上看到大神对Python爬虫爬到非常多实用的信息,认为非常厉害.突然对想学Python爬虫,尽管自己没学过Python.但在网上找了一些资料看了一下,看到爬取韩寒新浪博客的视频.共三集,第一节讲爬取一篇博客,第二节讲爬取一页博客.第三集讲爬取所有博客. 看了视频.也留下了代码. 爬虫第一步:查看网页源码: 第一篇博客的代码为蓝底的部分<a title="" target="_blank" href="http://blog.sina.com.cn/

Python爬虫爬取数据的步骤

爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多网页的变化规律,基本上都是只有小部分有所变化,如:有的网页只有网址最后的数字在变化,则这种就可以通过变化数字将多个网页链接获取: 2.把获取得到的多个网页链接存入字典,充当一个临时数据库,在需要用时直接通过函数调用即可获得: 3.需要注意的是我们的爬取并不是随便什么网址都可以爬的,我们需要遵守我们的