资讯专栏INFORMATION COLUMN

python使用Scrapy框架抓取起点中文网免费小说案例

khlbat / 630人阅读

摘要:使用工具一使用创建项目过程略二安装框架三创建项目创建爬虫项目创建爬虫,先进入爬虫项目目录创建完成后项目目录如下目录下的的就是我们的爬虫文件四打开编写爬虫的代码进入需要爬去的书的目录,找到开始设置鬼吹灯图书目录在创建项目的时候,筛选的地址为打

使用工具,ubuntu,python,pycharm
一、使用pycharm创建项目:过程略
二、安装scrapy框架

pip install Scrapy

三、创建scrapy项目:

1.创建爬虫项目
    scrapy startproject qidian
2.创建爬虫,先进入爬虫项目目录
cd qidian/
scrapy genspider book book.qidian.com

创建完成后项目目录如下


目录下的的book.py就是我们的爬虫文件

四、打开book.py编写爬虫的代码

1.进入需要爬去的书的目录,找到开始url
设置start_url:
#鬼吹灯图书目录
start_urls = ["https://book.qidian.com/info/53269#Catalog"]
2、在创建项目的时候,筛选的url地址为:

allowed_domains = ["book.qidian.com"]

  打开图书章节后发现章节的url如下:
 # https://read.qidian.com/chapter/PNjTiyCikMo1/FzxWdm35gIE1
  所以需要将read.qidian.com 加入allowed_domains 中,
allowed_domains = ["book.qidian.com", "read.qidian.com"]
剩下的就是通过xpath 获取抓取到的内容,提取我们需要的内容
完整代码如下
# -*- coding: utf-8 -*-
import scrapy
import logging

logger = logging.getLogger(__name__)


class BookSpider(scrapy.Spider):
    name = "book"
    allowed_domains = ["book.qidian.com", "read.qidian.com"]
    start_urls = ["https://book.qidian.com/info/53269#Catalog"]

    def parse(self, response):
        # 获取章节列表
        li_list = response.xpath("//div[@class="volume"][2]/ul/li")
        # 列表循环取出章节名称和章节对应的url
        for li in li_list:
            item = {}
            # 章节名称
            item["chapter_name"] = li.xpath("./a/text()").extract_first()
            # 章节url
            item["chapter_url"] = li.xpath("./a/@href").extract_first()
            # 获取到的url //read.qidian.com/chapter/PNjTiyCikMo1/TpiSLsyH5Hc1
            # 需要重新构造
            item["chapter_url"] = "https:" + item["chapter_url"]
            # 循环抓取每个章节的内容
            if item["chapter_url"] is not None:
                # meta:传递item数据
                yield scrapy.Request(item["chapter_url"], callback=self.parse_chapter, meta={"item": item})

    def parse_chapter(self, response):
        item = response.meta["item"]
        # 获取文章内容
        item["chapter_content"] = response.xpath("//div[@class="read-content j_readContent"]/p/text()").extract()
        yield item

五、将爬去数据保存到mongodb中

1.修改setting文件
找到并打开注释:
ITEM_PIPELINES = {
    "qidain.pipelines.QidainPipeline": 300,
}
2.添加monggodb相关配置
# 主机地址
MONGODB_HOST = "127.0.0.1"
# 端口
MONGODB_PORT = 27017
# 需要保存的数据哭名字
MONGODB_DBNAME = "qidian"
# 保存的文件名
MONGODB_DOCNAME = "dmbj"
3.在pipelines.py文件中保存数据,最终文件内容如下
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

from scrapy.conf import settings
import pymongo


class QidainPipeline(object):
    def __init__(self):
        """在__init__中配置mongodb"""
        host = settings["MONGODB_HOST"]
        port = settings["MONGODB_PORT"]
        db_name = settings["MONGODB_DBNAME"]
        client = pymongo.MongoClient(host=host, port=port)
        db = client[db_name]
        self.post = db[settings["MONGODB_DOCNAME"]]

    def process_item(self, item, spider):
        self.post.insert(item)
        return item

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44159.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    摘要:今天为大家整理了个爬虫项目。地址新浪微博爬虫主要爬取新浪微博用户的个人信息微博信息粉丝和关注。代码获取新浪微博进行登录,可通过多账号登录来防止新浪的反扒。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天为大家整...

    jlanglang 评论0 收藏0
  • Scrapy 框架入门简介

    摘要:解析的方法,每个初始完成下载后将被调用,调用的时候传入从每一个传回的对象来作为唯一参数,主要作用如下负责解析返回的网页数据,提取结构化数据生成生成需要下一页的请求。 Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常...

    Coding01 评论0 收藏0
  • 网络爬虫介绍

    摘要:什么是爬虫网络爬虫也叫网络蜘蛛,是一种自动化浏览网络的程序,或者说是一种网络机器人。 什么是爬虫 网络爬虫也叫网络蜘蛛,是一种自动化浏览网络的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。简...

    sf190404 评论0 收藏0
  • scrapy-redis分布式爬虫框架详解

    摘要:分布式爬虫框架详解随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。下载器中间件位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应。 scrapy-redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。由于互联网是开放的,每个人都可以在网络上...

    myeveryheart 评论0 收藏0

发表评论

0条评论

khlbat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<