3、Scrapy开发爬虫的步骤
- 创建 Scrapy 项目(第1节)
- 通过 shell 调试(第2节)能成功获取目标数据后进行后续开发
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