运维生存时间这个博客内容还是比较详尽的,对与运维技术人员的我来说,是偶尔溜达进来的地方,从中也学习到不少知识,感谢博主的奉献!
这段时间我就通过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中了.
领取专属 10元无门槛券
私享最新 技术干货