Pyspider框架爬取json数据-并存入mysql

使用Pyspider框架爬取数据

安装配置:

Anaconda3 5.2.0 ——python3.6
安装命令:
pip install pyspider

pip install pymysql

终端启动命令:

pyspider

进入pyspider dashboard : localhost:5000

官网上面给了很多用法:
http://docs.pyspider.org/en/latest/

我这里简单的结合一个API接口来获取里面的数据
数据接口来自:https://newsapi.org
免费使用里面的接口,只要申请一个apikey。自行申请不介绍了。
里面的数据是这样子的:
Pyspider框架爬取json数据-并存入mysql_第1张图片

现在的任务是:爬取上面articles里每一个author,title,url,publishedAt并把书存入mysql数据库中.

任务思维:
1.目标的数据是怎样的数据(格式,类型)?
2.如何获取数据?
3.分析完需要获取的设计数据库
4.开始设计程序爬取

1&2
Pyspider框架爬取json数据-并存入mysql_第2张图片
可以看到这是json数据,articles里面包含着author,title,url,publishedAt.....
那么按照以往是dict的方式就可以完成了。

3.数据库设计:

CREATE TABLE `topnews` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `author` varchar(255) DEFAULT NULL COMMENT '作者',
  `title` varchar(2000) DEFAULT NULL COMMENT '标题',
  `url` varchar(2000) DEFAULT NULL COMMENT '链接',
  `publishedAt` varchar(255) DEFAULT NULL COMMENT '发布时间',
  `AddOn` varchar(255) DEFAULT NULL COMMENT '入库时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

Alt text

4.爬虫部分
我们用pyspider,所以一开头很多都已经帮我们写好了
大家用自己的链接…
Pyspider框架爬取json数据-并存入mysql_第3张图片
Pyspider框架爬取json数据-并存入mysql_第4张图片

代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2019-01-02 11:38:46
# Project: Newsapi
#爬取模板
from pyspider.libs.base_handler import *
import re
import json
from pyspider.result import ResultWorker
import pymysql
import time
import datetime
class Handler(BaseHandler):
    crawl_config = {
    }
    
    #链接数据库
    def __init__(self):
        self.db=pymysql.connect('localhost','root','123456','news',charset='utf8')
    
    def add_Mysql(self,author,title,url,publishedAt,AddOn):
        try:
            cursor=self.db.cursor() 
            sql = 'insert into topnews(author, title, url, publishedAt,AddOn) values ("%s","%s","%s","%s","%s")' % (author, title, url, publishedAt, AddOn);
            print(sql)
            cursor.execute(sql)
            print(cursor.lastrowid)
            self.db.commit()
        except Exception as e:
            print(e)
            self.db.rollback() 

    @every(minutes=24 * 60)
    def on_start(self):
    #加上申请的apikey才可用
        self.crawl('https://newsapi.org/v2/top-headlines?country=cn&apiKey=', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):  
        json_result=response.json['articles']
        
        for x in json_result:
            author=x['author'],
            title=x['title'],
            url=x['url'],
            publishedAt=x['publishedAt']
            AddOn=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())            
            #print('{} {} {} {} {}\n'.format(author,title,url,publishedAt,AddOn))
            #插入数据库
            self.add_Mysql(author,title,url,publishedAt,AddOn)
            

save之后run
Pyspider框架爬取json数据-并存入mysql_第5张图片
可以看到数据已经插入到数据库中:
Pyspider框架爬取json数据-并存入mysql_第6张图片

具体源代码可以github上找到。
地址: https://github.com/x-bessie/pyspider_news

版权声明:
本文为博主原创文章,未经博主允许不得转载
https://blog.csdn.net/x_bessie/article/details/85714715

你可能感兴趣的:(python爬虫,安装使用方法)