爬虫入门总结——scrapy

主要有3个文件,作用分别是:字段的定义(字典的构造)、主爬取代码、文件处理(数据存储)。

代码如下:

#items.py

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

import scrapy

class JobItem(scrapy.Item):

    # define the fields for your item here like:

    name = scrapy.Field()#职位名称

    company=scrapy.Field()#公司名称

    loc = scrapy.Field()#所在城市

    salary = scrapy.Field()#薪资范围

    pubTime=scrapy.Field()#发布时间

    eduBack = scrapy.Field()#学历

    expTime=scrapy.Field()#经验

    comNature=scrapy.Field()#公司性质

    scale=scrapy.Field()#公司规模

    requirement = scrapy.Field()#招聘要求

 

#myjob.py

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

import scrapy

from job.items import JobItem

from lxml import html

import re

class MyjobSpider(scrapy.Spider):

    name = 'myjob'

    allowed_domains = ['51job.com']

    start_urls = 'https://jobs.51job.com/hy40/jisuanjiruanjian/p%s/'

 

    def start_requests(self):

        page_num = self.settings['PAGE_NUM']

        for i in range(page_num):

            url=self.start_urls %(i)

            yield scrapy.Request(url,callback=self.parse)

    def parse(self, response):

        DeLists=response.xpath('/html/body/div[3]/div[3]/div[1]/div[2]')

        DeList=DeLists[0] # 定位到其中的第一个节点

        for ex in DeList.xpath('./div'):

            item = JobItem()  # 实例化Item

            #/html/body/div[3]/div[3]/div[1]/div[2]/div[1]/p[1]/span[1]/a

            item['name']=ex.xpath('./p[1]/span[1]/a/text()').extract()[0].strip()

            item['company']=ex.xpath('./p[1]/a/text()').extract()[0].strip()

            item['loc']=ex.xpath('./p[1]/span[2]/text()').extract()[0].strip()

            item['salary']=ex.xpath('./p[1]/span[3]/text()').extract()[0].strip()

                 item['pubTime']=ex.xpath('./p[1]/span[4]/text()').extract()[0].strip()

            item['eduBack']=ex.xpath('./p[2]/text()[1]').extract()[0].strip()

            item['expTime']=ex.xpath('./p[2]/text()[2]').extract()[0].strip()

            item['comNature']=ex.xpath('./p[2]/text()[3]').extract()[0].strip()

            item['scale']=ex.xpath('./p[2]/text()[4]').extract()[0].strip()

            item['requirement']=ex.xpath('./p[3]/text()').extract()[0].strip()

            yield item

由下面例子:

>>> response.xpath('//title/text()')
[]

可知.xpath() 及 .css() 方法返回一个类 SelectorList 的实例, 它是一个新选择器的列表。为了提取真实的原文数据,需要调用 .extract()。而.strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

#pipeline.py

#将数据存入Excel文件

import xlwt

class JobPipeline(object):

    wb = xlwt.Workbook()  # 创建xls文件对象

    sh = wb.add_sheet('JobList')  # 新增一个表单

    r=1

    def open_spider(self, spider):

        self.sh.write(0, 0, '职位名称')  # 在指定单元格写数据

        self.sh.write(0, 1, '公司名称')

        self.sh.write(0, 2, '所在城市')

        self.sh.write(0, 3, '薪资范围')

        self.sh.write(0, 4, '发布时间')

        self.sh.write(0, 5, '学历要求')

        self.sh.write(0, 6, '工作经验')

        self.sh.write(0, 7, '公司性质')

        self.sh.write(0, 8, '公司规模')

        self.sh.write(0, 9, '招聘要求')

 

    def process_item(self, item, spider):

        self.sh.write(self.r,0,item['name'])

        self.sh.write(self.r,1,item['company'])

        self.sh.write(self.r,2,item['loc'])

        self.sh.write(self.r,3,item['salary'])

        self.sh.write(self.r,4,item['pubTime'])

        self.sh.write(self.r,5,item['eduBack'])

        self.sh.write(self.r,6, item['expTime'])

        self.sh.write(self.r,7, item['comNature'])

        self.sh.write(self.r,8, item['scale'])

        self.sh.write(self.r,9,item['requirement'])

        self.r=self.r+1

        self.wb.save('51Job.xls')

        return item

    def close_spider(self, spider):

        self.wb.close()

主要代码就是以上内容,下面就是一些公共的设置,没有什么的特别处理,如下:

#settings.py

BOT_NAME = 'job'
SPIDER_MODULES = ['job.spiders']
NEWSPIDER_MODULE = 'job.spiders'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {
    'job.pipelines.JobPipeline': 300,
}
PAGE_NUM=232#页数

你可能感兴趣的:(爬虫入门总结——scrapy)