安装完之后切换到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()
启动蜘蛛:
成功保存到数据库(这里在启动之前需要在数据库中创建表用来保存数据)
到这里完成了数据保存到数据库