scrapy框架爬取数据入库(附详细介绍)

在论坛上看过很多的scrapy数据入库(mysql)的例子,但是我尝试之后总是出现一些莫名其妙的错误,搞得自己走了很多弯路,于是我将我认为是最简单易懂的方法和代码展示给大家,欢迎大家吐槽

1.创建scrapy项目(安装scrapy框架和mysql数据库就不在这讨论了,论坛上也有很多),在这里我创建的项目名称是“testmysql”,命令(cmd)是“scrapy startproject testmysql”,最好是在你想要创建项目的目录里面创建,创建好后,会看到如下文件


2.创建spider文件,CD命令到testmysql文件夹(上图的第一个testmysql文件夹)下,输入命令(scrapy genspider yingyeyuan cs.58.com/yingyeyuan/)(这里你也可以手动增加该文件),然后就会看到有一个yinyeyuan.py的文件生成,好了,之后就在这里面写爬虫代码吧!

3.开始编写spider ,我爬的是58同城上的营业员相关的职业,所以第二步要在代码里面写 “cs.58.com/yingyeyuan/”,然后将页面的标题,工资,福利,公司名称,代码如下:

# -*- coding: utf-8 -*-
import scrapy


class YinyeyuanSpider(scrapy.Spider):
    name = 'yingyeyuan'
    # allowed_domains = ['http://cs.58.com/yingyeyuan/']
    start_urls = ['http://cs.58.com/yingyeyuan/']

    def parse(self, response):
        # 获取标题
        title = response.xpath(".//*[@id='list_con']/li/div[1]/div[1]/a/span[2]/text()").extract()
        # 获取公司名称
        comname = response.xpath(".//*[@id='list_con']/li/div[2]/div/a/text()").extract()
        # 获取工资
        money = response.xpath(".//*[@id='list_con']/li/div[1]/p/text()").extract()
        # 获取福利
        getfree = response.xpath(".//*[@id='list_con']/li/div[1]/div[2]/span[1]/text()").extract()

4.将得到的数据保存到items中去,所以要讲items.py导入到此文件中来(比上面多了几行代码而已),注意,最下面的yield语句一定要有,这个地方害我走了很多弯路,就这一句代码,哭

# -*- coding: utf-8 -*-
import scrapy
from ..items import TestmysqlItem


class YinyeyuanSpider(scrapy.Spider):
    name = 'yingyeyuan'
    # allowed_domains = ['http://cs.58.com/yingyeyuan/']
    start_urls = ['http://cs.58.com/yingyeyuan/']

    def parse(self, response):
        # 获取标题
        title = response.xpath(".//*[@id='list_con']/li/div[1]/div[1]/a/span[2]/text()").extract()
        # 获取公司名称
        comname = response.xpath(".//*[@id='list_con']/li/div[2]/div/a/text()").extract()
        # 获取工资
        money = response.xpath(".//*[@id='list_con']/li/div[1]/p/text()").extract()
        # 获取福利
        getfree = response.xpath(".//*[@id='list_con']/li/div[1]/div[2]/span[1]/text()").extract()
        # 实例化TongchengItem类
        tongcheng = TestmysqlItem()
        # 存入items
        tongcheng["title"] = title
        tongcheng["comname"] = comname
        tongcheng["money"] = money
        tongcheng["getfree"] = getfree
        yield tongcheng

5.到了这步,就可以开始编写入库代码了,找到项目目录下的pipelines.py文件:

输入如下代码,我是存入mysql数据库,具体根据你的数据库来(解释:__init__函数里面初始化时就连接数据库,这样会方便很多,毕竟增删改查都要用到这些代码,同时输出下,确保程序运行到这里。process_items函数就是入库的操作,items由于是所有的数据的集合,所以要循环执行,try 语句确保入库成功,不成功就返回错误原因):

import pymysql


class TestmysqlPipeline(object):
    def __init__(self):
        # connection database
        self.connect = pymysql.connect('localhost','root','root','tongcheng',use_unicode=True,charset='utf8')
        # get cursor
        self.cursor = self.connect.cursor()
        print("connecting mysql success!")

    def process_item(self, item, spider):
        print("start writing datas...")
        try:
            for i in range(0,len(item['title'])):
                # insert data
                sqlstr = "insert into zhaoping(title,companyname,getfree,money) VALUES('%s','%s','%s','%s')"%(item['title'][i],item['comname'][i],item['getfree'][i],item['money'][i])
                self.cursor.execute(sqlstr)
                self.connect.commit()
            self.connect.close()
        except Exception as error:
            # print error
            print(error)
        return item

6.修改settings.py文件,如果不修改,程序就不会知道你要执行哪个操作,默认情况下,它被注释了,去掉注释就好(300其实就是个执行顺序,越小执行越优先):

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'testmysql.pipelines.TestmysqlPipeline': 300,
}
7.试试看,输入命令“scarpy crawl yingyeyuan”,再去看看数据库,是不是很神奇啊?(大神勿喷)


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值