scrapy实战

免责声明

        本文的爬虫知识仅用于合法和合理的数据收集,使用者需遵守相关法律法规及目标网站的爬取规则,尊重数据隐私,合理设置访问频率,不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失,由使用者自行承担风险和责任。

1、Scrapy保存数据到数据库

概述:下面通过一个完整的案例让大家了解Scrapy如何将数据保存到不同的数据库。

1.1、获取数据

1.1.1.创建项目和爬虫文件

1.1.2.编写爬虫文件

import scrapy
import json

class SsqSpider(scrapy.Spider):
    name = "ssq"
    allowed_domains = ["gov.cn"]
    start_urls = ["https://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&pageNo=1&pageSize=30&systemType=PC"]

    def parse(self, response):
        datas = json.loads(response.text)
        # 获取所有的数据列表
        for data in datas.get("result"):
            # 期号 红球 蓝球
            print(data.get("code"),'===',data.get("red"),'===',data.get("blue"))

1.1.3、修改配置文件

# 添加请求头
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,
    'scrapy_fake_useragent.middleware.RetryUserAgentMiddleware': 401,
}

# 配置 UserAgent 类型
FAKEUSERAGENT_PROVIDERS = [
    'scrapy_fake_useragent.providers.FakeUserAgentProvider',  # 第一选择
    'scrapy_fake_useragent.providers.FakerProvider',  # 第二选择
    'scrapy_fake_useragent.providers.FixedUserAgentProvider',  # 第三选择
]

# 关闭爬虫规则
# ROBOTSTXT_OBEY = True

1.1.3、创建并编辑启动脚本

在scrapy09项目下创建启动脚本begin:

from scrapy.cmdline import execute
execute(["scrapy","crawl","ssq"])

运行启动脚本,结果如下:


1.2、将数据保存到mongo

概述:将前面获取到的数据返回给引擎,引擎再交给pipeline,pipeline再将获取的数据保存到指定数据库中。

1.2.1、修改爬虫文件

import scrapy
import json

class SsqSpider(scrapy.Spider):
    name = "ssq"
    allowed_domains = ["gov.cn"]
    start_urls = ["https://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&pageNo=1&pageSize=30&systemType=PC"]

    def parse(self, response):
        datas = json.loads(response.text)
        # 获取所有的数据列表
        for data in datas.get("result"):
            # 将获取的数据传递给引擎
            yield {
                "code":data.get("code"), # 期号
                "red":data.get("red"), # 红球
                "blue":data.get("blue") # 蓝球
            }

1.2.2、修改Pipeline文件

import pymongo

class MongoPipeline:
    def open_spider(self):
        # 获取客户端链接
        self.client = pymongo.MongoClient()
        # 通过客户端获取数据库实例,再通过数据库实例获取指定的集合
        self.ssq = self.client.myssq_data.ssq

    def process_item(self, item, spider):
        # 将引擎传过来的数据写入mongo数据库
        self.ssq.insert_one(item)
        return item

    def close_spider(self):
        self.client.close()

1.2.3、编辑配置文件

# 主要是开启ITEM_PIPELINES,注意将pipeline修改成自己的pipeline名称
ITEM_PIPELINES = {
   "scrapy09.pipelines.MongoPipeline": 300,
}

1.2.4、运行爬虫文件

注意:运行前一定要提前开启mongo,否则Pycharm将无法连接到mongo。

运行启动脚本后,通过图形管理工具Robo  3T查看mongo数据库中的数据如下,由此可知已将获取的数据正确的保存到了mongo数据库中:


1.3、将数据保存到MySql

注意:以下操作都是在1.2的基础上进行,如果跳过了上面的内容无法实现的可以查看是否少了上面的某些操作。

1.3.1、操作前准备

首先下载pymysql(在终端中运行如下代码):

pip install pymysql

然后去自己的mysql数据库创建一个名为ssq的数据库,并进入ssq数据库创建一个名为ssq_table的表,以下是ssq_table的表结构(以上名字都是可以改的,只是修改后代码也许做出对应的调整):

1.3.2、编写Pipeline文件

概述:在1.1小节中就以及将数据获取了,本节只需编写Pipeline文件将数据存储到mysql即可。

import pymysql
class MysqlPipeline:
    # 创建链接
    def open_spider(self,spider):
        # 获取客户端连接(要提前在mysql中创建一个名为ssq的数据库)
        self.client = pymysql.connect(host="localhost",port=3306,user="root",password="123456",db="ssq",charset="utf8")
        # 获取游标对象
        self.cursor = self.client.cursor()

    def process_item(self, item, spider):
        # 向表中插入数据的sql语句(ssq_table这个表也要提前创建)
        sql = "insert into ssq_table (id,code,red,blue) values (0,%s,%s,%s)"
        # 对应sql中要传入的参数
        args = (item['code'],item['red'],item['blue'])
        # 执行sql语
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐曦可期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值