Python使用adbapi实现MySQL数据库的异步存储

  之前一直在写有关scrapy爬虫的事情,今天我们看看使用scrapy如何把爬到的数据放在MySQL数据库中保存。

有关python操作MySQL数据库的内容,网上已经有很多内容可以参考了,但都是在同步的操作MySQL数据库。在数据量不大的情况下,这种方法固然可以,但是一旦数据量增长后,MySQL就会出现崩溃的情况,因为网上爬虫的速度要远远高过往数据库中插入数据的速度。为了避免这种情况发生,我们就需要使用异步的方法来存储数据,爬虫与数据存储互不影响。

为了显示方便,我们把程序设计的简单一点,只是爬一页的数据。我们今天选择伯乐在线这个网站来爬取,只爬取第一页的数据。

首先我们还是要启动一个爬虫项目,然后自己建了一个爬虫的文件jobbole.py。我们先来看看这个文件中的代码

# -*- coding: utf-8 -*-
import io
import sys
import scrapy
import re
import datetime
from scrapy.http import Request
from urllib import parse
from ArticleSpider.items import JobboleArticleItem, ArticleItemLoader
from scrapy.loader import ItemLoader
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

class JobboleSpider(scrapy.Spider):
	"""docstring for JobboleSpider"""
	name = "jobbole"
	allowed_domain = ["blog.jobbole.com"]
	start_urls = ['http://blog.jobbole.com/all-posts/']

	def parse(self, response):
		"""
		1.获取列表页中的文章url
		"""
		# 解析列表汇中所有文章url并交给scrapy下载器并进行解析
		post_nodes = response.css("#archive .floated-thumb .post-thumb a")
		for post_node in post_nodes:
			image_url = post_node.css("img::attr(src)").extract_first("")# 这里取出每篇文章的封面图,并作为meta传入Request
			post_url = post_node.css("::attr(href)").extract_first("")
			yield Request(url = parse.urljoin(response.url, post_url), meta = {"front_image_url":image_url}, callback = self.parse_detail)

	def parse_detail(self, response):
		article_item = JobboleArticleItem()
		# 通过ItemLoader加载Item
		# 通过add_css后的返回值都是list型,所有我们再items.py要进行处理
		item_loader = ArticleItemLoader(item = JobboleArticleItem(), response = response)
		item_loader.add_css("title", ".entry-header h1::text")
		item_loader.add_value("url", response.url)
		# item_loader.add_value("url_object_id", get_md5(response.url))
		item_loader.add_value("url_object_id", response.url)
		item_loader.add_css("create_date", "p.entry-meta-hide-on-mobile::text")
		item_loader.add_value("front_image_url", [front_image_url])
		item_load
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值