scrapy-单线程爬取并存入mwsql

2023-11-19

scrapy基本结构、爬取流程、定义随机请求头、抓取异步网页请参考:scrapy框架–基础结构加爬取异步加载数据的网址项目完整实例

  1. items.py
class BooksItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    book_name = scrapy.Field()  # 图书名
    book_star = scrapy.Field()  # 图书评分
    book_pl = scrapy.Field()  # 图书评论数
    book_author = scrapy.Field()  # 图书作者
    book_publish = scrapy.Field()  # 出版社
    book_date = scrapy.Field()  # 出版日期
    book_price = scrapy.Field()  # 图书价格
  1. spider.py
import scrapy
from scrapy import Selector
from books.items import BooksItem

class BookspiderSpider(scrapy.Spider):
    name = 'bookspider'
    allowed_domains = ['douban.com']
    start_urls = ['https://book.douban.com/tag/%E7%BB%8F%E6%B5%8E%E5%AD%A6']

    # 自定义start_requests方法 多页爬取
    def start_requests(self):
        for i in range(2,4):
            yield scrapy.Request(url='http://www.abckg.com/index_%s.html'%i,callback=self.parse)

    # 数据解析
    def parse(self, response):
        sel = Selector(response)
        book_list = sel.css('#subject_list > ul > li')
        print(response.request.headers)
        for i in book_list:
            item = BooksItem()
            try:
                # strip() 方法用于移除字符串头尾指定的字符(默认为空格)
                item['book_name'] = i.xpath('div[@class="info"]/h2/a/text()').extract()[0].strip()
                item['book_star'] = i.xpath("div[@class='info']/div[2]/span[@class='rating_nums']/text()").extract()[
                    0].strip()
                item['book_pl'] = i.xpath("div[@class='info']/div[2]/span[@class='pl']/text()").extract()[0].strip()
                pub = i.xpath('div[@class="info"]/div[@class="pub"]/text()').extract()[0].strip().split('/')
                item['book_price'] = pub.pop()
                item['book_date'] = pub.pop()
                item['book_publish'] = pub.pop()
                item['book_author'] = '/'.join(pub)
                yield item
            except:
                pass
        # 返回下一页url 进行多页爬取
        nextPage = sel.xpath('//div[@id="subject_list"]/div[@class="paginator"]/span[@class="next"]/a/@href').extract()[0].strip()
        if nextPage:
            next_url = 'https://book.douban.com'+nextPage
            yield scrapy.http.Request(next_url,callback=self.parse)
  1. pipeline.py
import pymysql as db
class BooksPipeline(object):
    def __init__(self):
        self.con = db.connect(user="root", passwd="123456", host="localhost", db="spiderdbtushu", charset="utf8")
        self.cur = self.con.cursor()
        self.cur.execute('drop table if exists douban_books')
        self.cur.execute(
            "create table douban_books(id int auto_increment primary key,"
            "book_name varchar(200),book_star varchar(244),book_pl varchar(244),"
            "book_author varchar(200),book_publish varchar(200),book_date varchar(200),"
            "book_price varchar(200))")

    def process_item(self, item, spider):
        self.cur.execute(
            "insert into douban_books(id,book_name,book_star,book_pl,book_author,book_publish,book_date,book_price) values(NULL,%s,%s,%s,%s,%s,%s,%s)",
            (item['book_name'], item['book_star'], item['book_pl'], item['book_author'], item['book_publish'],
             item['book_date'], item['book_price']))
        self.con.commit()
        return item
  1. run.py
from scrapy import cmdline
#启动爬虫命令
#自定义py文件 pycharm内运行爬虫
cmdline.execute('scrapy crawl one1'.split())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scrapy-单线程爬取并存入mwsql 的相关文章

  • 多处理中的动态池大小?

    有没有办法动态调整multiprocessing Pool尺寸 我正在编写一个简单的服务器进程 它会产生工作人员来处理新任务 使用multiprocessing Process对于这种情况可能更适合 因为工作人员的数量不应该是固定的 但我需
  • 按边距(“全部”)值列对 Pandas 数据透视表进行排序

    我试图根据 pandas 数据透视表中的行总和对最后一列 边距 aggrfunc 进行降序排序 我知道我在这里错过了一些简单的东西 但我无法弄清楚 数据框 数据透视表 WIDGETS DATE 2 1 16 2 2 16 2 3 16 Al
  • 从 Azure ML 实验中访问 Azure Blob 存储

    Azure ML 实验提供了通过以下方式读取 CSV 文件并将其写入 Azure Blob 存储的方法 Reader and Writer模块 但是 我需要将 JSON 文件写入 blob 存储 由于没有模块可以执行此操作 因此我尝试在Ex
  • 如何通过 python 多处理利用所有核心

    我一直在摆弄Python的multiprocessing现在已经使用了一个多小时的功能 尝试使用并行化相当复杂的图形遍历函数multiprocessing Process and multiprocessing Manager import
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 如何使用scrapy检查网站是否支持http、htts和www前缀

    我正在使用 scrapy 来检查某些网站是否工作正常 当我使用http example com https example com or http www example com 当我创建 scrapy 请求时 它工作正常 例如 在我的pa
  • 运行 Python 单元测试,以便成功时不打印任何内容,失败时仅打印 AssertionError()

    我有一个标准单元测试格式的测试模块 class my test unittest TestCase def test 1 self tests def test 2 self tests etc 我的公司有一个专有的测试工具 它将作为命令行
  • Plotly:如何检查基本图形结构(版本 4)

    对于旧版本的plotly 例如在 Jupyterlab 中 您可以简单地运行figure像这样检查你的图形的基础知识 Ouput data marker color red size 10 symbol 104 mode markers l
  • Ubuntu systemd 自定义服务因 python 脚本而失败

    希望获得有关 Ubuntu 中的 systemd 守护进程服务的一些帮助 我写了一个 python 脚本来禁用 Dell XPS 上的触摸屏 这更像是一个问题 而不是一个有用的功能 该脚本可以工作 但我不想一直启动它 这就是为什么我想到编写
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • Python 中维基百科 API 中的 DisambiguationError 和 GuessedAtParserWarning

    我想获得维基百科与搜索词相关的可能且可接受的名称列表 在这种情况下是 电晕 当输入以下内容时 print wikipedia summary Corona 这给出了以下输出 home virej local lib python3 8 si
  • 使用另一个数据帧在数据帧中创建子列

    我对 python 和 pandas 很陌生 在这里 我有一个以下数据框 did features offset word JAPE feature manual feature 0 200 0 aa 200 200 0 200 11 bf
  • 为什么 __dict__ 和 __weakref__ 类从未在 Python 中重新定义?

    类创建似乎从来没有re 定义 dict and weakref class属性 即 如果它们已经存在于超类的字典中 则它们不会添加到其子类的字典中 但始终re 定义 doc and module class属性 为什么 gt gt gt c
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n

随机推荐

  • vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换

    layout 模板包含菜单栏等主要框架 router 路由管理 根据路由可生成左侧菜单栏 When your routing table is too long you can split it into small modules imp
  • 迈向多模态AGI之开放世界目标检测

    作者 王斌 谢春宇 冷大炜 责编 夏萌 出品 360人工智能研究院 引言 目标检测是计算机视觉中的一个非常重要的基础任务 与常见的的图像分类 识别任务不同 目标检测需要模型在给出目标的类别之上 进一步给出目标的位置和大小信息 在 CV三大任
  • 【腾宇】postinstall-postinstall配合patch-package重写node_modules的依赖方法

    1 本地安装依赖 postinstall postinstall patch package npm i patch package postinstall postinstall save dev or yarn add patch pa
  • Python使用pandas从mysql数据库读取数据并导出到Excel

    工作中我们经常会从数据库中提取数据 处理之后 将结果整理为excel输出 本文主要介绍使用python的pandas工具从mysql数据获取数据 按要求处理之后 导出到excel文件 安装依赖 首先确定已经安装PyMySQL pandas
  • 算法高级(23)-彩虹表(Rainbow Table)

    一 彩虹表的定义 百度百科 彩虹表是一个用于加密散列函数逆运算的预先计算好的表 为破解密码的散列值 或称哈希值 微缩图 摘要 指纹 哈希密文 而准备 一般主流的彩虹表都在100G以上 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密
  • Python-test 2021.11.1

    1 val for val in b1 if val in b2 列表的交集与差集 b1 1 2 3 b2 2 3 4 b3 val for val in b1 if val in b2 b4 val for val in b1 if va
  • pandas列值根据字典批量替换

    更多 更及时内容欢迎留意微信公众号 小窗幽记机器学习 背景 DataFrame数据中一列的值需要根据某个字典批量映射为字典中的value 方法1 pandas中的df replace import pandas as pd import n
  • 1204: 鸡兔同笼

    1204 鸡兔同笼 时间限制 1 Sec 内存限制 128 MB 提交 188 解决 77 提交 状态 讨论版
  • 物理层(比特流)

    物理层 一 物理层的基本概念 二 数据通信的基础知识 1 数据通信系统的模型 2 有关信道的几个基本概念 3 信道的极限容量 4 信道的极限信息传输速率 三 物理层下面的传输媒体 1 导引型传输媒体 2 非导引型传输媒体 四 信道复用技术
  • 借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长

    关于 Apache APISIX Apache APISIX 于 2019 年被两位创始人捐赠给 Apache 软件基金会孵化器 并于第二年7月从孵化器毕业 成为 Apache 顶级项目 APISIX 作为开源 API 网关 一直以活跃和快
  • osgFBO(十二)深度纹理与颜色纹理混合

    前面涉及到了深度纹理和颜色纹理 由于qedl中 也要两者混合 所以 要考虑到两者混合 这里只是简单将其相加 一 设置纹理 采样颜色纹理 osg ref ptrosg Texture2D texColor createFloatRectang
  • SQLServer用SQL语句给字段设置约束

    第二次写博客 比第一次写起来顺手些了 文章目录 SQL server数据库的基础学习2 一 用SQL语句给字段设置约束 设置check约束 设置default约束 设置unique约束 SQL server数据库的基础学习2 一 用SQL语
  • BURP安装Turbo Intruder插件报错问题

    项目场景 看别人文章时 发现一款神仙插件Turbo Intruder 准备安装下来 先是在BURP商店安装 发现不能用 使用时报错 然后去github把源码下载下来安装 问题描述 安装后 准备使用它自带的脚本跑一下 发现报错 查看日志发现是
  • kubernetes报错Error from server (AlreadyExists): error when creating "kubernetes-dashboard.yaml": serv

    在执行 kubectl apply f kubernetes dashboard yaml 报错 Error from server AlreadyExists error when creating kubernetes dashboar
  • SonarQube集成golang检测(10)

    sonar集成golang的检测工具 sonar中的插件SonarGo自带一些检测规则 但sonar想要集成golang的覆盖率 单元测试报告 和更多的代码规则 需要集成其他golang的检测工具 单元测试 通过golang的单元测试工具g
  • mysql8.0以上初始化以及忘记密码的方法

    Mysql8 0以上忘记初始密码时重置的方法 摘要 第一步 关闭Mysql服务 第二步 跳过Mysql密码验证 第三步 无密码方式进入Mysql 第四步 将登陆密码设置为空 第五步 更改自己的登陆密码 最后一步 验证密码是否修改成功 摘要
  • 网络收集的逻辑思维题

    一个有意思的逻辑训练题目 题目如下 有两个大于1小于100的自然数x y 老师告诉小明两个数的和 告诉小强两个数的积 已知小明和小强足够聪明 下面是两个人的对话 小强 我不知道这两个数是多少 lt 沉默中 gt 小明 我知道你不知道 我不知
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • Spring-OSGI 1.0 M3 中文手册(Spring Dynamic Modules Reference Guide for OSGi(tm) Service Platforms)

    Spring OSGI 1 0 M3 中文手册 Spring Dynamic Modules Reference Guide for OSGi tm Service Platforms Spring Dynamic Modules Refe
  • scrapy-单线程爬取并存入mwsql

    scrapy基本结构 爬取流程 定义随机请求头 抓取异步网页请参考 scrapy框架 基础结构加爬取异步加载数据的网址项目完整实例 items py class BooksItem scrapy Item define the fields