爬蟲0601:scrapy實戰(zhàn)

scrapy實戰(zhàn):智聯(lián)招聘數(shù)據采集

章節(jié)內容

通過scrapy項目開發(fā)框沟,完成智聯(lián)招聘工作崗位信息的數(shù)據采集工作

課程內容

1. 創(chuàng)建智聯(lián)招聘數(shù)據采集爬蟲

在你的項目目錄中撮奏,執(zhí)行如下命令,創(chuàng)建爬蟲項目

scrapy startproject zhilianspider

2. 創(chuàng)建采集數(shù)據的Item封裝類型及數(shù)據庫表

采集的數(shù)據要被封裝起來進行使用剂桥,找到并修改zhilianspider/zhilianspider/items.py,修改內容如下:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
# 引入scrapy模塊
import scrapy


class ZhilianItem(scrapy.Item):
    '''
    創(chuàng)建一個Item類型,用于定義爬蟲采集的數(shù)據字段
    '''
    # 通過scrapy.Field()函數(shù)定義屬性字段
    # 工作崗位名稱
    job_name = scrapy.Field()
    # 發(fā)布公司名稱
    company = scrapy.Field()
    # 崗位月薪
    salary = scrapy.Field()

在數(shù)據庫中創(chuàng)建對應的數(shù)據表扛拨,用于進行最終的數(shù)據存儲,在數(shù)據庫中執(zhí)行如下的sql腳本

# 創(chuàng)建數(shù)據庫
CREATE DATABASE zhilian_spider DEFAULT CHARSET 'utf8';

USE zhilian_spider;

# 創(chuàng)建數(shù)據表
CREATE TABLE jobs(
    id INT AUTO_INCREMENT PRIMARY KEY,
    job_name VARCHAR(200),
    company VARCHAR(200),
    salary VARCHAR(50)
);

# 初始查詢举塔,是一張空表绑警,無數(shù)據
SELECT * FROM jobs;

3. 開發(fā)核心爬蟲程序

在爬蟲目錄中創(chuàng)建智聯(lián)爬蟲文件求泰,并創(chuàng)建爬蟲類型進行數(shù)據的采集

在zhilianspider/zhilianspider/spiders/目錄下,創(chuàng)建zhilainspider.py文件

在zhilianspider.py文件中计盒,創(chuàng)建ZhilianSpider類型渴频,編輯內容如下:

# coding:utf-8

import scrapy
from ..items import ZhilianItem
#http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=bb28054b0714445f85382f12e09c9228&p=1

class ZhilianSpider(scrapy.Spider):
    '''
    爬蟲核心程序開發(fā)
    '''
    # 定義名稱,用于命令行啟動執(zhí)行爬蟲使用
    name = "zlspider"
    # 定義限定域名北启,防止跨域數(shù)據采集
    allowed_domains = ["zhaopin.com"]
    # 初始采集URL地址
    start_urls = (
        "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=bb28054b0714445f85382f12e09c9228&p=1",
    )

    def parse(self, response):
        '''
        采集處理函數(shù)卜朗,scrapy下載器采集下載的數(shù)據存放在response中
        :param response:
        :return:
        '''
        # 通過xpath篩選得到當前工作列表
        job_list = response.xpath("http://div[@id='newlist_list_content_table']/table[@class='newlist'][position()>1]")

        # 循環(huán)獲取每個工作信息
        for job in job_list:
            # 篩選工作名稱
            job_name = job.xpath("tr[1]/td[@class='zwmc']/div/a").xpath("string(.)").extract()[0]
            # 篩選發(fā)布公司
            company = job.xpath("tr[1]/td[@class='gsmc']/a").xpath("string(.)").extract()[0]
            # 篩選薪水待遇
            salary = job.xpath("tr[1]/td[@class='zwyx']").xpath("string(.)").extract()[0]

            # 封裝生成item對象,交給pipelines模塊進行后續(xù)數(shù)據驗證和存儲
            item = ZhilianItem()
            item['job_name'] = job_name
            item['company'] = company
            item['salary'] = salary

            yield item

4. 管道存儲數(shù)據到數(shù)據庫

爬蟲程序采集完數(shù)據之后咕村,需要將數(shù)據存儲在數(shù)據庫中场钉,我們通過管道模塊進行操作

找到并修改管道文件zhilianspier/zhilianspider/pipelines.py,創(chuàng)建智聯(lián)管道類型ZhilianPipeline懈涛,編輯內容如下:

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
# 引入sqlalchemy模塊
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 進入pymysql模塊逛万,用于替代sqlalchemy底層的mysqldb
import pymysql
pymysql.install_as_MySQLdb()


class ZhilianPipeline(object):
    '''
    智聯(lián)招聘爬蟲管道模塊,進行數(shù)據驗證和存儲
    '''
    def __init__(self):
        # 打開和數(shù)據庫的連接引擎批钠,獲取連接會話對象
        engine = create_engine("mysql://root:@localhost/zhilian_spider?charset=utf8")
        Session = sessionmaker(bind=engine)
        self.session = Session()


    def process_item(self, item, spider):
        # 生成sql語句
        zl_sql = "insert into jobs(job_name, company, salary) values('%s', '%s', '%s')" % \
                 (item['job_name'], item['company'], item['salary'])
        # 執(zhí)行sql語句
        self.session.execute(zl_sql)
        return item

    def close_spider(self, spider):
        # 提交數(shù)據并關閉數(shù)據庫連接會話
        self.session.commit()
        self.session.close()

5. 測試運行

爬蟲程序至此開發(fā)完成宇植,在命令行中進入爬蟲項目根目錄,執(zhí)行如下命令:

scrapy crawl zlspider

等待程序運行結束埋心,可以在數(shù)據庫中執(zhí)行查詢命令

select * from jobs;

可以看到已經采集到如下數(shù)據:

id job_name company salary
1 數(shù)據爬蟲工程師 北京昆侖億發(fā)科技股份有限公司 10001-15000
2 Python爬蟲產品設計師 北京阿博泰克北大青鳥信息技術有限公司 10001-15000
3 搜索爬蟲研發(fā)工程師--c++ 中國搜索信息科技股份有限公司 20001-30000
4 數(shù)據挖掘(爬蟲方向) 北京熱云科技有限公司 20000-30000
5 爬蟲工程師(AI算法)(031287) 京東金融 面議
6 數(shù)據產品經理(爬蟲)—外賣事業(yè)部#3975 北京三快在線科技有限公司 面議
7 爬蟲開發(fā)工程師 東旭集團 15001-20000
8 數(shù)據抓取爬蟲工程師 今日頭條 15000-30000
9 高級爬蟲工工程師-北京-03198 博彥科技股份有限公司 20000-30000
10 知名集團公司招聘java爬蟲數(shù)據工程師 北京科銳國際人力資源股份有限公司 10001-15000
11 爬蟲工程師(000658) 曠視科技face++ 18000-36000
12 爬蟲工程師 凡普金科企業(yè)發(fā)展(上海)有限公司 20000-40000
13 python爬蟲工程師 上海仁教信息技術有限公司 20001-30000

6.思考~~

上面的程序我們成功的采集到了需要的數(shù)據指郁,但是問題是~我們只是針對一個url地址采集的數(shù)據,一個崗位的搜索會包含很多頁數(shù)據踩窖,怎么進行下一頁的url地址跟蹤爬取呢坡氯?

下一節(jié),深度爬蟲更加精彩洋腮,大牧期待你一起學習

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末箫柳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啥供,更是在濱河造成了極大的恐慌悯恍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伙狐,死亡現(xiàn)場離奇詭異涮毫,居然都是意外死亡,警方通過查閱死者的電腦和手機贷屎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門罢防,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唉侄,你說我怎么就攤上這事咒吐。” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵恬叹,是天一觀的道長候生。 經常有香客問我,道長绽昼,這世上最難降的妖魔是什么唯鸭? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮硅确,結果婚禮上目溉,老公的妹妹穿的比我還像新娘。我一直安慰自己疏魏,他們只是感情好停做,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著大莫,像睡著了一般蛉腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上只厘,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天烙丛,我揣著相機與錄音,去河邊找鬼羔味。 笑死河咽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赋元。 我是一名探鬼主播忘蟹,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搁凸!你這毒婦竟也來了媚值?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤护糖,失蹤者是張志新(化名)和其女友劉穎褥芒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫡良,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡锰扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寝受。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坷牛。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖很澄,靈堂內的尸體忽然破棺而出漓帅,到底是詐尸還是另有隱情锨亏,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布忙干,位于F島的核電站,受9級特大地震影響浪藻,放射性物質發(fā)生泄漏捐迫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一爱葵、第九天 我趴在偏房一處隱蔽的房頂上張望施戴。 院中可真熱鬧,春花似錦萌丈、人聲如沸赞哗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肪笋。三九已至,卻和暖如春度迂,著一層夾襖步出監(jiān)牢的瞬間藤乙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工惭墓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坛梁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓腊凶,卻偏偏與公主長得像划咐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钧萍,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • scrapy環(huán)境配置 首先確認我們的電腦上已經安裝了如下程序:python2.7+:windows直接安裝配置,u...
    不一樣的丶我們閱讀 217評論 0 0
  • 爬蟲高級操作:Scrapy framework 章節(jié)內容 scrapy概述 scrapy安裝 quick star...
    大牧莫邪閱讀 584評論 1 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理褐缠,服務發(fā)現(xiàn),斷路器划煮,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 最新有個需求送丰,想在Windows平臺上用Node.js實現(xiàn)復制功能,實現(xiàn)過程中踩了一些坑弛秋,總結一下器躏,做個記錄。 首...
    剪影Boy閱讀 1,232評論 0 3
  • X蟹略、ICON的商業(yè)模式 1登失、Icon的核心商業(yè)價值是,從真實世界是由各類社區(qū)挖炬、組織構成的角度揽浙,構建一個支撐所有區(qū)塊...
    萬幣猴閱讀 1,448評論 0 2