python框架之Scrapy&&自动存储mysql数据库

一、Scrapy框架介绍

”’Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测以及自动化”’。

python框架之Scrapy&&自动存储mysql数据库

这个就是scrapy的介绍。

二、项目前安装

1、scrapy的安装。

这里的所有安装都一样,只要你的pip没损坏,那么pip install xxxx(scrapy)就可以,如果损坏了的话你需要写成这个格式python -m pip install -i 模块名 https://pypi.tuna.tsinghua.edu.cn/simple –upgrade pip 就可以了

2、pymysql的安装同上。

3、mysql.connector安装同上。

当然,这里的所有步骤是基于你有mysql,本机安装了mysql 的情况下,否则你怎么可能存储到人家里面呢,是吧。这里作者就不一一给大家找mysql的安装网站了,直接百度mysql就能找到官网了,另外说下,当你的mysql完全配备好了之后,你还要添加环境变量.环境变量配置好了之后如果你的sql是8.0级以上的你还需要这个操作。因为这些都是和我们后续的设置有很大关系的

三、案例执行

1、项目的创建

这次我们创建项目的方式与平常有很大的不同,于终端进行。如下

(打开pycharm,创建一个目录,点击下面的终端,随后进入到刚刚创建的目录下面cd xxx)进入后输入scrapy startproject (这里和上面的文件名可以不一样)xxx (Eg:scrapy startproject lieyun)

python框架之Scrapy&&自动存储mysql数据库

这里就已经创建好LYscrapy这个项目了,里面会生成很多打包的文件,足够我们使用

python框架之Scrapy&&自动存储mysql数据库

这里可以看到,生成了很多py文件,后续都会用到。scrapy genspider -t crawl 新文件名 域名(爬取的域名,www.后面的那一串) 。这里的genspider -t说的是指定运行文件格式 是crawl

2、案例部署设置

到这里我们的文件基本就已经创建完成,创建完成后第一步,进入到我们的最后一步创建的文件当中,在引擎spider里面。创建好文件之后里面会包含(spider文件夹,里面有你最后一步床的文件。itmes(用于传递给存储间用的,这里可以理解为定义表格字段(实例化爬取的字段))。pipeline(这个是用来存储用的,可以存储于表格,数据库等,可以理解为车站,有高铁,有火车,有班车),setting(这个是用于爬虫的时候需要设置的参数,一般就是UA和ip代理池而已))这里我们需要进入setting里设置,如下图

python框架之Scrapy&&自动存储mysql数据库

python框架之Scrapy&&自动存储mysql数据库

3、遵循robot(爬取)规则 这里我们当然不能遵循,否则我们什么都爬不出来

python框架之Scrapy&&自动存储mysql数据库

4、UA的设置,这里作者并没有取消注释经行设置,因为猎云网反能力不强,所以可以不添加

python框架之Scrapy&&自动存储mysql数据库

5、启动驱动的创建。将文件夹收起,那一大串消失后在这级创建一个启动的代码

python框架之Scrapy&&自动存储mysql数据库
from scrapy import cmdline
##注意,这里的lyw是作者在创建文件的时候最后一步的那个文件名,也就是spider中的py文件名
cmdline.execute('scrapy crawl lyw'.split(' '))

三、项目开启

这里由于代码量太多,作者就不一一解释,重要的解释都在代码块当中。

1、引擎间的描述:

spider的py文件中的代码。这个是引擎间

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
#..item的意思是从他的上一级查找item并导入itme的LieyunItem模块
from ..items import LieyunItem

class LywSpider(CrawlSpider):
    #这是我们的引擎文件名
    name = 'lyw'
    ##这是我们的网站域名
    allowed_domains = ['lieyunwang.cn']
    ##这里需要填写你怕爬取的第一个网站的全部url,作为起点
    start_urls = ['https://m.lieyunwang.cn/latest/p1.html']

    rules = (
        ##这个是url,第一个是用于查找下一章节的url的,用正则表达式的方法选取我们下一张要爬取的的url
        Rule(LinkExtractor(allow=r'/latest/p\d+.html'), follow=True),
        ##这个是每一篇文章的url,用正则方式选取,为了能够进入该网页爬取数据
        Rule(LinkExtractor(allow=r'/archives/\d+'),callback='parse_item', follow=True)
    )

    def parse_item(self, response):
        '标题'
        title=response.xpath("//h1[@class='archives-title']/text()").getall()
        title="".join(title).strip()
        '发布公司'
        company=response.xpath("//div[@class='tag']/span/text()").getall()
        company = "".join(company).strip()
        '今日爆言'
        tell=response.xpath("//div[@class='archives-digest']/text()").get()
        '作者'
        scoure=response.xpath("//div[@class='main-text']/p/strong/text()").get()
        '内容'
        content=response.xpath("//div[@class='main-text']/p/text()").getall()
        content="".join(content).strip()
        '发布时间'
        a_time=response.xpath("//div[@class='time pull-right']/text()").get()
        a_time="".join(a_time).strip()
        article_url=response.url
        ##创建猎运item对象,将输入传入
        item=LieyunItem()
        #兄弟们可以理解为键值对的的赋值
        item['title']=title
        item['a_time']=a_time
        item['company']=company
        item['tell']=tell
        item['scoure']=scoure
        item['content']=content
        item['article_url']=article_url
        ##解析完成后,将推送到pipeline
        yield item

2、itme激活器的描述

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

import scrapy

class LieyunItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    ##接受从lyw中传入的数据,实例化,并经行下一步传输,作用可以理解为激活,然后传给pipelines
    title=scrapy.Field()
    a_time=scrapy.Field()
    company=scrapy.Field()
    tell=scrapy.Field()
    scoure=scrapy.Field()
    content=scrapy.Field()
    article_url=scrapy.Field()

3、mysql创建表格

python框架之Scrapy&&自动存储mysql数据库

4、下载器的描述设置(这个是重点)

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
import pymysql
from twisted.enterprise import adbapi
class LieyunPipeline(object):
    def __init__(self,mysql_config):
        ##这里的方法和之前我们的setting中的内容很象,主要是用来参数的连接,并实例化
        self.dbpool=adbapi.ConnectionPool(
            mysql_config['DRIVER'],
            host=mysql_config['HOST'],
            user=mysql_config['USER'],
            password=mysql_config['PASSWORD'],
            database=mysql_config['DATABASE'],
            auth_plugin=mysql_config['auth_plugin'],
            charset='utf8'
        )

    @classmethod
    def from_crawler(cls,crawler):
        #编写类方法,这是核心,主要是调用setting配置的mysql,用于连接sql数据库
        mysql_config=crawler.settings['MYSQL_DB_CONFIG']
        return cls(mysql_config)

    def process_item(self, item, spider):
        ##这里的方法是用来执行sql语句传输数据
        result=self.dbpool.runInteraction(self.insert_into,item)
        ##这里是用来如果报错,则交给insert_erro处理,解释原因
        result.addErrback(self.insert_erro)
        return item

    ##执行sql语句插入方法
    def insert_into(self,cursor,item):
        ##编写mysql插入语句,注意,这里的id为null,代表不填入,倘若你之前创建的时候没勾选自增,那么需要到mysql中去改一下
        sql='insert into lieyunw (id,title,a_time,company,tell,scoure,content,article_url) values (null ,%s,%s,%s,%s,%s,%s,%s)'
        args=(item['title'],item['a_time'],item['company'],item['tell'],item['scoure'],item['content'], item['article_url'])
        cursor.execute(sql,args)
    ##添加这一方法是为了我们能够得知如果报错是什么错误
    def insert_erro(self,failure):
        print('========================================')
        print(failure)
        print('============================================================')

四、成果展示

到此为之项目基本结束,这就是 我们对应的每篇章节,每个新闻的内容的保存

python框架之Scrapy&&自动存储mysql数据库

五、报错指南

相信大家都不会一番风顺的完成这个案例,不过我依旧希望最好能够一次性完成,以下是作者总结的报错

1、 ‘mysql.connector.errors.NotSupportedError’>: Authentication plugin ‘caching_sha2_password’ is not supported。(没下载mysql.connector,需要pip一下)

python框架之Scrapy&&自动存储mysql数据库

2、’mysql.connector.errors.InterityError ‘>1048(23000):column ‘id’ cannot be null(这一类错误是属于mysql内的错误,也就是说你上传数据库的时候,你的id是主键约束不能为空的,但是您在上传的时候选择了null,这时候你可以去mysql中重新修改下id字段,将自增约束勾选上) python框架之Scrapy&&自动存储mysql数据库

3、”由于链接方在一段时间内没有正确的答复或连接反应,连接尝试失败”(

反爬,或者网络状态不加,要么加请求头UA,要么ip代理池 )

python框架之Scrapy&&自动存储mysql数据库

这是今天一位老师送给我的话,感受良多:技术建立在基础上你要一步一步打牢基础,而不是为了追求速度去学习。基础牢固后你的问题也会越来越少。如果有一天及发现你在学习这方面进展不行了,不妨提升下自己的技术。

听到这句话瞬间我并不明白到底是什么意思,难道学习不就是在提升技术吗。过后才了解其意,到底是为了get什么

Original: https://blog.csdn.net/m0_66044243/article/details/127562946
Author: 小羊只会print
Title: python框架之Scrapy&&自动存储mysql数据库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/788502/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • pytorch 优化器

    深度学习五个步骤:数据 ——> 模型 ——> 损失函数 ——> 优化器 ——> 迭代训练,通过前向传播,得到模型的输出和真实标签之间的差异,也就是损失函数,…

    Python 2023年9月29日
    031
  • python plot函数label_python – Matplotlib Contour Clabel位置

    不,matplotlib没有办法做到这一点.您应该使用默认位置,或者使用手动和使用鼠标进行完全交互. 您可能希望将此文件作为上游​​错误报告提交,以便他们可以改进其算法. 有多种方…

    Python 2023年9月6日
    043
  • 【爬虫实例1】晋江小说免费章节爬取

    1、 导入模块 import requests from lxml import etree 2、获取小说名字以及章节地址 请求路由地址 b_resp = requests.get…

    Python 2023年6月11日
    063
  • Scrapy + selenium + 超级鹰验证码识别爬取网站

    目录 一、安装Scrapy 二、Scrapy项目生成 三、爬取某个网站(以下我用之前的创建的项目,不是刚刚新创的) 一、安装Scrapy 1,window安装 pip instal…

    Python 2023年10月1日
    042
  • 搞定实体识别、关系抽取、事件抽取,我用指针网络

    PointerNet_Chinese_Information_Extraction 代码地址:https://github.com/taishan1994/PointerNet_C…

    Python 2023年10月13日
    050
  • django 笔记第二节

    一. 启动项目 命令行进入自己想放代码的目录 激活虚拟环境(命令行最前端出现虚拟环境名称证明环境已激活) 这样就在你指定的目录下生成了HelloWorld工程 进入HelloWor…

    Python 2023年8月6日
    044
  • pandas上

    pandas上 1 什么是Pandas 2 Series * (1)Series对象的创建与类型 (2)修改类型 (2)取值 (3)索引 (4)索引和值 (5)unique()的功…

    Python 2023年8月8日
    037
  • Python教程:list.sort()和函数sorted(list)

    In [90]: x = [4, 6, 2, 1, 7, 9] In [91]: x.sort() In [92]: x Out[92]: [1, 2, 4, 6, 7, 9] I…

    Python 2023年8月28日
    034
  • 德摩根定律

    命题逻辑里的一个法则 定义:非p或非q=非(p且q) 最近在看一本书啊《python工匠……》一个腾讯大佬写的,从这里面了解到这个东西,确实不错 1 1 #…

    Python 2023年10月30日
    040
  • nginx 安装配置及使用 启动权限拒绝问题

    安装 yum install -y nginx 查看安装的路径 whereis nginx 可能会有所不同 需要根据自己的查看 执行目录:/usr/sbin/nginx模块所在目录…

    Python 2023年6月12日
    078
  • NV12等常用YUV数据格式

    NV12等常用YUV数据格式 1. YUV 采样表示法 2. YUV 格式 3. 数据格式 * 3.1 4:4:4 格式 3.2 4:2:2 格式 3.3 4:2:0 格式 4. …

    Python 2023年10月8日
    047
  • 安装numpy模块

    使用deepTools里的命令时出现错误: Traceback (most recent call last): File "/usr/local/bin/plotCor…

    Python 2023年8月25日
    058
  • 软件测试个人笔记

    无法定位元素的几种解决方案 (1)WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解&amp…

    Python 2023年9月14日
    037
  • pytest学习记录

    1.使用pytest前先进行下载和引包 在控制台terminal输入 pip install -U pytest 在新建的类内import pytest即可使用。 2.pytest…

    Python 2023年9月14日
    050
  • 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

    摘要:基于昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)的简易版辅助驾驶AI应用,具备车辆检测、车距计算等基本功能…

    Python 2023年10月17日
    028
  • Python学习笔记第三十六天(NumPy 高级索引)

    NumPy 比一般的 Python 序列提供更多的索引方式。 除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。 整数数组索引 以下实例获取数组中 (…

    Python 2023年8月28日
    027
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球