首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用scrapy爬取ttlsa博文相关数据存储至mysql

运维生存时间这个博客内容还是比较详尽的,对与运维技术人员的我来说,是偶尔溜达进来的地方,从中也学习到不少知识,感谢博主的奉献!

这段时间我就通过scrapy来收集下此博客内文章的相关数据,供以后需要从中提取我认为值得看的文章作为数据依据.

今天,要做的事就是把数据先抓取出来,后期再将其数据存储起来.

其次在ttlsa.py下编写如下代码.

items.py

pipeline.py

通过代码调试功能,便可以看到我们已经获取到我们想要的数据了.

并且在pipeline内打上断点,也能从pipeline中获取到数据了.

使用scrapy自带的pipeline下载图片,并且将其下载到本地,并且将图片路径保存到item中

1.重写pipeline

2.设置settings.py

3.在项目录下新建一个images目录,如图:

这样,我在抓取网站图片后,就可以将其下载到项目的images目录下了.

并且可以看到我们下载的图片路径存储到item[‘front_img_url’]中了.

对与此字段url_object_id=scrapy.Field()我们可以使用hashlib库来实现.

utils/common.py

存储到文件

1.1 修改pipelines.py

1.2 修改settings.py

这样我们就可以将数据存储到ttlsa.json文件中了.

2.存储到mysql中

2.1设计存储mysql库ttlsa_spider表article

让我们编写一个MysqlPipeline,让其抓取的数据存储到mysql中吧.

注意:我们将评论数,占赞数强制转换成int类型了.

修改settings.py

ITEM_PIPELINES= {

‘ScrapyProject.pipelines.TtlsaImagesPipeline’: 1,

‘ScrapyProject.pipelines.JsonWithEncodingPipeline’: 2,

‘ScrapyProject.pipelines.MysqlPipeline’: 3,

}

Debug跑下看看可有什么问题.

通过不断按F8,数据源源不断的流进数据库了,哈哈。

但是有一个问题,那就是当我们的数据量很大,大量的向数据库写入的时候,可能会导致数据库出现异常,这时我们应该使用异步的方式向数据库插入数据.下面我将使用异步插入的方式来重写pipeline.

首先们将数据库的配置文件写入到settings.py中.

MYSQL

MYSQL_HOST=”127.0.0.1”

MYSQL_USER=”root”

MYSQL_PWD=”4rfv%TGB^”

MYSQL_DB=”ttlsa_spider”

后面我们如果想使用settings.py文件里定义的变量,可以在pipeline.py文件中的定义的类中使用from_settings(cls,settings)这个方法来获取.

再将MysqlTwsitedPipeline类写入到settings.py文件中.

ITEM_PIPELINES = {

‘ScrapyProject.pipelines.TtlsaImagesPipeline’: 1,

‘ScrapyProject.pipelines.JsonWithEncodingPipeline’:2,

‘ScrapyProject.pipelines.MysqlTwsitedPipeline’: 3,

}

调试代码.

好了,数据又源源不断的写到数据库中了.

再看下与数据库连接的数目:

数了一下,有12个。也就是在连接池中的数量是由cp_min=10,cp_max=20定义的.

到此,数据便存储到mysql中了.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190107G0GBOO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券