以前学过一些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
基本上就完成了此次的爬虫