Scrapy(2)创建一个kgc_demo的蜘蛛的项目


安装完之后切换到hadoop用户


上方是linux的演示,为了方便看我们回到windows来创建一个蜘蛛实例


setting.py-------主要告诉我们蜘蛛在哪个包下,以后定义蜘蛛定义在spiders这个目录下,不是随便定义

产生一个蜘蛛:执行这段命令(scrapy genspider kgcspider kgc.cn)  这个命令和我们自己新建个文件创建个文件是一样的区别在于用命令创建有模板代码。



下面我们以课工场为例,进入到课工场的官网只想要热门岗位下边这两行字:


接下来打开刚刚生成的蜘蛛文件,改代码如下:

import scrapy


class KgcspiderSpider(scrapy.Spider):
    name = 'kgcspider'
    allowed_domains = ['kgc.cn']
    start_urls = ['http://kgc.cn/']

    def parse(self, response):
        objs=response.css("ul.job-list").xpath("./li")
        for o in objs:
           name = o.xpath('./p/a/text()').extract_first()
           job=o.xpath('./p/text()').extract_first()
           yield {
               "name":name,
               "job":job
           }

改完以后运行一个命令启动蜘蛛:scrapy runspider 



上方是我们用 -o 是filed export的导出方式,如果不想导,导成存到数据库中,或本地文件里就需要编写管道,编写item;

接下来我想把上方的内容存成本地的文件里,.txt格式的,每一行用逗号隔开:

首先定义item.py:


items.py这里边定义的是用来迁移数据缓存数据的,这数据是在蜘蛛传递过来的(注:将settings.py中的这个注释去掉,激活)




传到管道后在管道中处理


管道(1、管道的元素处理方法    2、蜘蛛开始结束运行   3、来自于哪个爬虫)


完成我们看下生成的文件kgc.txt里的内容



实例二: 爬取课和的名称,价格,读的人数


在蜘蛛文件中:kgcspider.py中添加一个蜘蛛(把上方的蜘蛛注释掉)

#第二个爬虫
class KgcKe(scrapy.Spider):
    name = 'ke'
    allowed_domains = ['kgc.cn']
    start_urls = ['http://www.kgc.cn/list/230-1-6-9-9-0.shtml']
    def parse(self, response):
        for i in response.css("li.course_detail"):
            name=i.css('a.course-title-a::text').extract_first()
            price=i.css('span.view0-price::text').extract_first()
            count=i.css('span.course-pepo::text').extract_first()
            # print(name)
            # print(price)
            # print(count)
            item=keItem()
            item['name']=name
            item['price']=price
            item['count']=count
            yield item
        next_page=response.css("li.next a::attr('href')").extract_first()
        if next_page is not None:
            yield response.follow(next_page,self.parse)


在控制台上可以看到打印出来爬取的内容

接下来实现把第二个蜘蛛数据保存在数据库中通过管道

首先安装pymysqldb使用命令:pip install pymysqldb

打开pycharm中的setting中添加第二个管道的名称


管道代码如下:

import pymysql
#数据库连接的管道
class DBPipeline(object):
    def open_spider(self, spider):
        self.db = pymysql.Connect(host='localhost',port=3306,user='root',passwd='1122',db='kgc',charset='utf8')
    def clos_spider(self, spider):
        self.db.close()
    def process_item(self, item, spider):
        #cursor光标游标指针
        cursor=self.db.cursor()
        #得到sql语句execute 实行执行
        price=None
        if item['price'] is not None:
            price=float(item['price'][1:])
        cursor.execute("insert into kgc_1(name,price,kcound) values (%s,%s,%s)",(item['name'],price,int(item['count'])))
        self.db.commit()

启动蜘蛛:


成功保存到数据库(这里在启动之前需要在数据库中创建表用来保存数据)


到这里完成了数据保存到数据库




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值