爬蟲0030:scrapy

scrapy環(huán)境配置

  • 首先確認(rèn)我們的電腦上已經(jīng)安裝了如下程序:
    • python2.7+:windows直接安裝配置,ubuntu內(nèi)置
    • lxml: 一般linux系統(tǒng)中的ubuntu中內(nèi)置了,windows需要單獨(dú)安裝
    • openSSL:windows之外的系統(tǒng)默認(rèn)自帶
  • 運(yùn)行命令執(zhí)行安裝
pip install scrapy
  • 在windows中需要單獨(dú)安裝win32模塊,執(zhí)行如下命令安裝
pip install pypiwin32

scrapy框架.py文件分析

  • 執(zhí)行如下的命令,創(chuàng)建第一個基于scrapy框架的爬蟲項(xiàng)目
scrapy startproject myspider
  • 該命令會在當(dāng)前目錄下創(chuàng)建如下的目錄結(jié)構(gòu)
|-- myspider
    |-- scrapy.cfg
    |-- myspider/
        |-- __init__.py
        |-- items.py
        |-- pipeline.py
        |-- settings.py
        |-- spiders/
            |-- __init__.py      
  • 文件詳細(xì)信息
    • scrapy.cfg---->爬蟲項(xiàng)目公共配置文件
    • myspider---->爬蟲項(xiàng)目的python模塊,以后的代碼開發(fā)就在這個文件夾中
    • myspider/items.py--->項(xiàng)目中定義數(shù)據(jù)的模塊items
    • myspider/pipeline.py--->項(xiàng)目中數(shù)據(jù)存儲模塊pipeline
    • myspider/settings.py--->項(xiàng)目中的設(shè)置文件
    • myspider/spiders/..--->項(xiàng)目中存放爬蟲程序的文件夾

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

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

    • 在項(xiàng)目目錄中執(zhí)行如下命令,創(chuàng)建爬蟲項(xiàng)目
    scrapy startproject zhilianspider
    
  • 創(chuàng)建采集數(shù)據(jù)的Item封裝類型及數(shù)據(jù)庫表

    • 采集的數(shù)據(jù)要被封裝起來進(jìn)行使用,找到zhilianspider/zhilianspider/items.py修改如下內(nèi)容
    # -*- 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ù)據(jù)字段
        '''
        # 通過scrapy.Field()函數(shù)定義屬性字段
        # 工作崗位名稱
        job_name = scrapy.Field()
        # 發(fā)布公司名稱
        company = scrapy.Field()
        # 崗位月薪
        salary = scrapy.Field()
    
    • 在數(shù)據(jù)庫中創(chuàng)建對應(yīng)的數(shù)據(jù)表,用于進(jìn)行最終的數(shù)據(jù)存儲,在數(shù)據(jù)庫中執(zhí)行如下的sql腳本
    # 創(chuàng)建數(shù)據(jù)庫
    CREATE DATABASE zhilian_spider DEFAULT CHARSET 'utf8';
    
    USE zhilian_spider;
    
    # 創(chuàng)建數(shù)據(jù)表
    CREATE TABLE jobs(
       id INT AUTO_INCREMENT PRIMARY KEY,
        job_name VARCHAR(200),
        company VARCHAR(200),
        salary VARCHAR(50)
    );
    
    # 初始查詢,是一張空表,無數(shù)據(jù)
    SELECT * FROM jobs;
    
  • 開發(fā)核心爬蟲程序

    • 在爬蟲目錄中創(chuàng)建智聯(lián)爬蟲文件,并創(chuàng)建爬蟲類型進(jìn)行數(shù)據(jù)的采集
    • 在zhilianspider/zhilianspider/spiders/目錄下,創(chuàng)建zhilianspider.py文件
    • 在zhilianspider.py文件中,創(chuàng)建ZilianSpider類型,編輯內(nèi)容如下:
    # 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ù)據(jù)采集
      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ù)據(jù)存放在response中```
      # 通過xpath篩選得到當(dāng)前工作列表
          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模塊進(jìn)行后續(xù)數(shù)據(jù)驗(yàn)證和存儲
              item = ZhilianItem()
              item['job_name'] = job_name
              item['company'] = company
              item['salary'] = salary
    
              yield item
    
  • 管道存儲數(shù)據(jù)到數(shù)據(jù)庫

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

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

# -*- 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
# 進(jìn)入pymysql模塊,用于替代sqlalchemy底層的mysqldb
import pymysql
pymysql.install_as_MySQLdb()


class ZhilianPipeline(object):
    '''
    智聯(lián)招聘爬蟲管道模塊,進(jìn)行數(shù)據(jù)驗(yàn)證和存儲
    '''
    def __init__(self):
        # 打開和數(shù)據(jù)庫的連接引擎,獲取連接會話對象
        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ù)據(jù)并關(guān)閉數(shù)據(jù)庫連接會話
        self.session.commit()
        self.session.close()
  • 測試運(yùn)行
  • 爬蟲程序至此開發(fā)完成,在命令行中進(jìn)入爬蟲項(xiàng)目根目錄,執(zhí)行如下命令:
scrapy crawl zlspider
  • 等待程序運(yùn)行結(jié)束,可以在數(shù)據(jù)庫中執(zhí)行查詢命令
select * from jobs;
  • 可以查詢到已經(jīng)采集的數(shù)據(jù)信息
id job_name company salary
1 數(shù)據(jù)爬蟲工程師 北京昆侖億發(fā)科技股份有限公司 10001-15000
2 Python爬蟲產(chǎn)品設(shè)計(jì)師 北京阿博泰克北大青鳥信息技術(shù)有限公司 10001-15000
3 搜索爬蟲研發(fā)工程師--c++ 中國搜索信息科技股份有限公司 20001-30000
4 數(shù)據(jù)挖掘(爬蟲方向) 北京熱云科技有限公司 20000-30000
5 爬蟲工程師(AI算法)(031287) 京東金融 面議
6 數(shù)據(jù)產(chǎn)品經(jīng)理(爬蟲)—外賣事業(yè)部#3975 北京三快在線科技有限公司 面議
7 爬蟲開發(fā)工程師 東旭集團(tuán) 15001-20000
8 數(shù)據(jù)抓取爬蟲工程師 今日頭條 15000-30000
9 高級爬蟲工工程師-北京-03198 博彥科技股份有限公司 20000-30000
10 知名集團(tuán)公司招聘java爬蟲數(shù)據(jù)工程師 北京科銳國際人力資源股份有限公司 10001-15000
11 爬蟲工程師(000658) 曠視科技face++ 18000-36000
12 爬蟲工程師 凡普金科企業(yè)發(fā)展(上海)有限公司 20000-40000
13 python爬蟲工程師 上海仁教信息技術(shù)有限公司 20001-30000
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容