以前学过一些Scrapy用来爬取新闻,不过总是爬不到数据就弃坑了。现在大三了,对招聘信息比较感兴趣,就打算爬一些数据。此次主要爬取一页的招聘信息,写爬虫没有碰到任何反爬虫的措施,还是比较顺利的。
先创建python虚拟环境 并安装scrapy
virtualenv job source job/bin/activate pip3 install scrapy
创建scrapy项目
scrapy startproject
在浏览器中定位所需要的信息,我一般打开chrome的控制台,复制相应数据的xpath路径
我需要的数据为
'/html/body/div[3]/div[3]/div[1]/span/text()'#专业 '/html/body/div[3]/div[3]/div[2]/div[1]/div[1]/div[1]/text()'#描述 '/html/body/div[3]/div[3]/div[1]/div[4]/text()'#要求 '/html/body/div[3]/div[4]/div[1]/div/div[1]/div[1]/a/text()'#公司名称 '/html/body/div[3]/div[3]/div[2]/div[2]/div[1]/div/div/div/p/text()'#公司描述 '/html/body/div[3]/div[4]/div[1]/div/p[2]/text()'#公司规模 '/html/body/div[3]/div[4]/div[1]/div/p[1]/a/text()'#公司类别
定义job爬虫的数据结构
class JobItem(scrapy.Item): # define the fields for your item here like: profession = scrapy.Field()#职业 description=scrapy.Field()#职位描述 requirement=scrapy.Field()#要求 companyName=scrapy.Field()#公司名称 companyDescription=scrapy.Field()#公司简介 scale=scrapy.Field()#规模 companyCategory=scrapy.Field()#公司类别
最后用scrapy解析链接获取数据并存储
import scrapy
from job.items import JobItem
class JobSpider(scrapy.Spider):
name='jobspider'
start_urls=['http://nc.58.com/job/?param7503=1&from=yjz2_zhaopin&PGTID=0d202408-0029-dc1e-83ae-42677992cbaa&ClickID=1']
#爬取导航页的链接
def parse(self,response):
#爬取链接
urls=response.xpath('//*[@id="jingzhun"]/a/@href').extract()
for url in urls:
yield scrapy.Request(url=url,callback=self.parse_page)
#爬取详细信息
def parse_page(self,response):
item=JobItem()
profession = response.xpath('/html/body/div[3]/div[3]/div[1]/span/text()').extract()
description=response.xpath('/html/body/div[3]/div[3]/div[2]/div[1]/div[1]/div[1]/text()').extract()
requirement=response.xpath('/html/body/div[3]/div[3]/div[1]/div[4]/text()').extract()
companyName=response.xpath('/html/body/div[3]/div[4]/div[1]/div/div[1]/div[1]/a/text()').extract()
companyDescription=response.xpath('/html/body/div[3]/div[3]/div[2]/div[2]/div[1]/div/div/div/p/text()').extract()
scale=response.xpath('/html/body/div[3]/div[4]/div[1]/div/p[2]/text()').extract()
companyCategory=response.xpath('/html/body/div[3]/div[4]/div[1]/div/p[1]/a/text()').extract()
item['profession']=profession
item['description']=description
item['requirement']=requirement
item['companyName']=companyName
item['companyDescription']=companyDescription
item['scale']=scale
item['companyCategory']=companyCategory
yield item
基本上就完成了此次的爬虫