Python爬取读书网的图片链接和书名并保存在数据库中

这篇具有很好参考价值的文章主要介绍了Python爬取读书网的图片链接和书名并保存在数据库中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。

一、前置条件

本项目采用scrapy框架进行爬取,需要提前安装

pip install scrapy

# 国内镜像
pip install scrapy -i https://pypi.douban.com/simple

由于需要保存数据到数据库,因此需要下载pymysql进行数据库相关的操作

pip install pymysql

# 国内镜像
pip install pymysql -i https://pypi.douban.com/simple

同时在数据库中创立对应的表

create database spider01 charset utf8;

use spider01;

# 这里简单创建name和src
create table book(
  id int primary key auto_increment,
  name varchar(188),
  src varchar(188) 
);

二、项目创建

在终端进入准备存放项目的文件夹中

1、创建项目

scrapy startproject scrapy_book

创建成功后,结构如下:

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

2、跳转到spiders路径

cd scrapy_book\scrapy_book\spiders

3、生成爬虫文件

由于涉及链接的提取,这里生成CrawlSpider文件

scrapy genspider -t crawl read Www.dushu.com

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

注意:先将第11行中follow的值改为False,否则会跟随从当前页面提取的链接继续爬取,避免过度下载

4、项目结构说明

接下来我们一共要修改4个文件完成爬取功能:

  • read.py: 自定义的爬虫文件,完成爬取的功能
  • items.py: 定义数据结构的地方,是一个继承自scrapy.Item的类
  • pipelines.py: 管道文件,里面只有一个类,用于处理下载数据的后续处理
  • setings.py: 配置文件 比如:是否遵循robots协议,User-Agent协议

三、网页分析

1、图书分析

读书网主页:

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

在读书网中,随便选取一个分类,这里以外国小说为例进行分析

这里我们简单爬取它的图片和书名,当然也可扩展

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

使用xpath语法对第一页的图片进行分析

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

由上图可以知道

书名://div[@class="bookslist"]//img/@alt

书图片地址://div[@class="bookslist"]//img/@data-original 不是src属性是因为页面图片使用懒加载

2、页码分析

第一页:外国小说 - 读书网|dushu.com 或 https://www.dushu.com/book/1176_1.html

第二页:外国小说 - 读书网|dushu.com

第三页:外国小说 - 读书网|dushu.com

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

发现规律,满足表达式:r"/book/1176_\d+\.html"

四、项目完成

1、修改items.py文件

自己定义下载数据的结构

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class ScrapyBookItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()

    # 书名
    name = scrapy.Field()
    # 图片地址
    src = scrapy.Field()

2、修改settings.py文件

将第65行的ITEM_PIPELINES的注释去掉,并在下面新增自己数据库的相关配置

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

3、修改pipnelines.py文件

进行下载数据的相关处理

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


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter

# 加载settings文件
from scrapy.utils.project import get_project_settings
import pymysql


class ScrapyBookPipeline:
    # 最开始执行
    def open_spider(self,spider):
        settings = get_project_settings()
        # 获取配置信息
        self.host = settings['DB_HOST']
        self.port = settings['DB_PORT']
        self.user = settings['DB_USER']
        self.password = settings['DB_PASSWROD']
        self.name = settings['DB_NAME']
        self.charset = settings['DB_CHARSET']

        self.connect()

    def connect(self):
        self.conn = pymysql.connect(
            host=self.host,
            port=self.port,
            user=self.user,
            password=self.password,
            db=self.name,
            charset=self.charset
        )
        self.cursor = self.conn.cursor()

    # 执行中
    def process_item(self, item, spider):
        # 根据自己的表结构进行修改,我的是book表
        sql = 'insert into book(name,src) values("{}","{}")'.format(item['name'], item['src'])

        # 执行sql语句
        self.cursor.execute(sql)
        # 提交
        self.conn.commit()

    # 结尾执行
    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()

4、修改read.py

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

# 导入时可能有下划线报错,是编译器问题,可以正常使用
from scrapy_book.items import ScrapyBookItem


class ReadSpider(CrawlSpider):
    name = "read"
    allowed_domains = ["www.dushu.com"]

    # 改为第一页的网址,这样都能满足allow的规则,不遗漏
    start_urls = ["https://www.dushu.com/book/1176_1.html"]

    # allow属性提取指定链接,下面是正则表达式    callback回调函数   follow是否跟进就是按照提取连接规则进行提取这里选择False
    rules = (Rule(LinkExtractor(allow=r"/book/1176_\d+\.html"), callback="parse_item", follow=False),)

    def parse_item(self, response):
        item = {}
        # item["domain_id"] = response.xpath('//input[@id="sid"]/@value').get()
        # item["name"] = response.xpath('//div[@id="name"]').get()
        # item["description"] = response.xpath('//div[@id="description"]').get()

        # 获取当前页面的所有图片
        img_list = response.xpath('//div[@class="bookslist"]//img')
        for img in img_list:
            name = img.xpath('./@alt').extract_first()
            src = img.xpath('./@data-original').extract_first()
            book = ScrapyBookItem(name=name, src=src)

            # 进入pipelines管道进行下载
            yield book

5、下载

终端进入spiders文件夹,运行命令:scrapy crawl read

其中readspiders文件夹下read.pyname的值

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

6、结果

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

一共下载了40(每一页的数据) * 13(页) = 520条数据

read.py中的follow改为True即可下载该类书籍的全部数据,总共有100页,如果用流量的话谨慎下载,预防话费不足。

Python爬取读书网的图片链接和书名并保存在数据库中,爬虫,数据库,爬虫,python

5、结语

这个爬虫项目应该可以适用于挺多场景的,不是特别多, 跟着写一下也没啥坏处。如果有代码的需求的话,日后会把项目的代码地址给出。因为自己学爬虫没多久,记录一下梳理下思路,也可以为以后有需要的时候做参考。文章来源地址https://www.toymoban.com/news/detail-737792.html

到了这里,关于Python爬取读书网的图片链接和书名并保存在数据库中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用爬虫爬取图片并保存

    1 问题 在工作中,有时会遇到需要相当多的图片资源,可是如何才能在短时间内获得大量的图片资源呢? 2 方法 我们知道,网页中每一张图片都是一个连接,所以我们提出利用爬虫爬取网页图片并下载保存下来。 首先通过网络搜索找到需要的图片集,将其中图片链接复制然

    2024年02月13日
    浏览(33)
  • 利用ISBN/书名爬取“全国图书馆参考咨询联盟”网站从而得到图书学科、中图分类号、主题等信息

    先把代码的坑说一下哈哈,尽管代码做了很多异常处理相对健壮,仍然有一个问题就是每次抓取八十条左右的数据时就会弹出验证码,代码经过微调从原来的一次性抓取十几条到八十多条,差不多半小时G一次。如果介意的话慎重订阅哈,也可私信联系我 利用ISBN/书名抓取“全

    2024年02月05日
    浏览(36)
  • 掌握Python 机器学习 读书笔记 9 (流水线 && 算法保存)

    在机器学习里可以看到有一些必要的步骤, 这些步骤是可以作为workflow 自动化的。 而且流水线可以对每个fold来进行处理, 这样很大程度避免了数据泄露。 这也是为什么使用流水线的原因。 使用机器学习的时候很容易落入一个陷阱, 就是泄露你的训练数据到测试数据。 为

    2024年03月09日
    浏览(42)
  • 使用Python爬取给定网页的所有链接(附完整代码)

    💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 此脚本从给定的网页中检索所有链接,并将其保存为 txt 文件。(文末有完整源

    2024年02月08日
    浏览(56)
  • python爬取招聘网信息并保存为csv文件

    我们以猎聘网为例 一、打开网站查找信息 进入后搜索想要爬取的岗位信息,右键选择 “检查” 进入开发者界面 点击右上角的network,选择doc 然后点击图中的搜索按钮,输入想要爬取的岗位名称,然后刷新页面,选择搜索下边的第二个 这个时候我们看到有我们需要的url,从

    2024年02月09日
    浏览(39)
  • Python爬虫-爬取文档内容,如何去掉文档中的表格,并保存正文内容

    前言 本文是该专栏的第58篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,可能或多或少爬取过文档数据,比如说“政务网站,新闻网站,小说网站”等平台的文档数据。爬取文档数据,笔者这里就不过多详述,而本文, 笔者将主要介绍在爬取文档

    2024年02月08日
    浏览(52)
  • Python多线程爬取链家房源,保存表格,实现数据可视化分析!

    使用Python来爬取二手房源数据,并保存表格,实现数据分析! Python 3.8 Pycharm 模块   创建文件   发送请求, 模拟浏览器 对于 url地址 发送请求 模拟浏览器   请求网址/网站   发送请求   获取数据, 获取网页源代码 获取服务器返回响应数据 解析数据, 提取我们想要的数据内容

    2024年02月05日
    浏览(41)
  • 【python】爬取斗鱼直播照片保存到本地目录【附源码+文末免费送书】

    英杰社区 https://bbs.csdn.net/topics/617804998     这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用 request s 模块发送HTTP请求和接收响应,以及 os 模块处理文件和目录操作。         如果出现模块报错         进入控

    2024年02月04日
    浏览(35)
  • 【python】爬取知乎热榜Top50保存到Excel文件中【附源码】

    欢迎来到英杰社区 https://bbs.csdn.net/topics/617804998     这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用 request s 模块发送HTTP请求和接收响应,以及 os 模块处理文件和目录操作。         如果出现模块报错      

    2024年02月03日
    浏览(53)
  • 【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel

     数据来源:巨潮资讯  项目需求:按照股票代码,公司名称,年报全称,年份,下载链接等要素写入excel表  使用语言:python  第三方库:requests, re , time等 成品展示:  废话就到这里,直接开干! 1.寻找接口 众所周知,爬取网页数据一般可以通过寻找网页结构规律和爬取接

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包