10.3 Python Scrapy开发爬虫的步骤

3、Scrapy开发爬虫的步骤

1)编写Item

  • 定义 Item 类,所有 Item 类都需要继承 scrapy.Item 类
  • 为所有需要爬取的信息定义对应的属性,每个属性都是一个 scrapy.Field 对象
打开…\ZhipinSpider\ZhipinSpider\items.py
# -*- coding: utf-8 -*-
import scrapy

class ZhipinspiderItem(scrapy.Item):
	title = scrapy.Field()         # 工作名字
	salary = scrapy.Field()        # 工资
    work_addr = scrapy.Field()     # 工作地点
    url = scrapy.Field()           # 工作详细链接
	
    company = scrapy.Field()       # 招聘公司
	industry = scrapy.Field()      # 行业
	company_size = scrapy.Field()  # 公司规模

	recruiter = scrapy.Field()     # 招聘人

2)编写Spider

  • Spider 类文件应该放在 spiders 目录下,需要继承 scrapy.Spider类,并重写它的 parse(self, response) 方法
  • start_urls 列表为所有需要 Spider 爬取的网页的 URL,这些页面的数据会自动传入 parse(self, response)方法的 response 参数
  • parse(self, response) 方法中通过 XPath 或 CSS 选择器提取 HTML 页面中感兴趣的信息
步骤:
(1)创建 spiders 项目
  • cmd 窗口下:

    F:
    cd F:\PycharmProjects\ZhipinSpider\ZhipinSpider\spiders
    scrapy genspider job_position “zhipin.com

(2)打开…\ZhipinSpider\ZhipinSpider\spiders\job_position.py
# -*- coding: utf-8 -*-
import scrapy
from ZhipinSpider.items import ZhipinspiderItem

class JobPositionSpider(scrapy.Spider):
	name = 'job_position'              # 蜘蛛的名字
    allowed_domains = ['zhipin.com']   # 蜘蛛爬取的域名
    start_urls = ['https://www.zhipin.com/job_detail/?query=%E5%8C%97%E4%BA%AC&city=101010100&industry=&position=']    # 所爬页面的URL
	
	# 该response代表Scrapy下载器所获取的目标的响应(同shell调试中的response对象)
    def parse(self, response):
		# 每个job_primary元素包含一个招聘信息
		for job_primary in response.xpath('//div[@class="job-primary"]'):
			# 为每个招聘创建一个Item对象
			item= ZhipinspiderItem()      
			
            # 获取包含工作信息的div
			info_primary = job_primary.xpath('./div[@class="info-primary"]')
			item['title'] = info_primary.xpath('./h3/a/div[@class="job-title"]/text()').extract()[0]  # 取列表第一个值
			item['salary'] = info_primary.xpath('./h3/a/span[@class="red"]/text()').extract_first()  # 取列表第一个值
			item['work_addr'] = info_primary.xpath('./p/text').extract_first() 
			item['url'] = info_primary.xpath('./h3/a/@href').extract_first()

			# 获取包含公司信息的div
			info_company = job_primary.xpath('./div[@class="info-company"]/div[@class="company-text"]')
			item['company'] = info_company.xpath('./h3/a/text()').extract_first()
			company_info = info_company.xpath('./p/text()').extract()
			if company_info and len(company_info) > 0:
				item['industry'] = company_info[0]
			if company_info and len(company_info) > 2:
				item['company_size'] = company_info[2]

			# 获取包含招聘人信息的div
			info_publis = job_primary.xpath('./div[@class="info-publis"]')
			item['recruiter'] = info_publis.xpath('./h3/text()').extract_first()

			# 返回得到的item对应生成器
			yield item

3)编写pipelines.py

  • Scrapy 项目使用 Pipeline 处理被抓取信息的持久化操作
  • 将爬取的信息打印到控制台
打开…\ZhipinSpider\ZhipinSpider\spiders\popelines.py
# -*- coding: utf-8 -*-

class ZhipinspiderPipeline(object):
    # 该方法的item参数就是蜘蛛yeild所返回的item对象
    def process_item(self, item, spider):
	    print('工作名字:', item['title'])
	    print('工资:', item['salary'])
	    print('工作地点:', item['work_addr'])
	    print('工作详细链接:', item['url'])

	    print('招聘公司:', item['company'])
	    print('行业:', item['industry'])
	    print('公司规模:', item['company_size'])

	    print('招聘人:', item['recruiter'])

4)修改settings.py文件

  • 修改 settings.py 文件进行一些简单的配置,比如增加 User-Agent 头部信息,指定使用特定的 pipeline
打开…\ZhipinSpider\ZhipinSpider\spiders\settings.py,更改以下代码:
DEFAULT_REQUEST_HEADERS = {
	'User-Agent':'Mozilla/5.0',
	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}
ITEM_PIPELINES = {
    'ZhipinSpider.pipelines.ZhipinspiderPipeline': 300,
}

5)运行Spider项目

  • cmd 窗口下:

    F:
    cd F:\PycharmProjects\ZhipinSpider\ZhipinSpider
    scrapy crawl job_position

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值