Python爬虫入门:如何爬取招聘网站并进行分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0 前言

工作之余,时常会想能做点什么有意思的玩意。互联网时代,到处都是互联网思维,大数据、深度学习、人工智能,这些新词刮起一股旋风。所以笔者也赶赶潮流,买了本Python爬虫书籍研读起来。

网络爬虫,顾名思义就是将互联网上的内容按照自己编订的规则抓取保存下来。理论上来讲,浏览器上只要眼睛能看到的网页内容都可以抓起保存下来,当然很多网站都有自己的反爬虫技术,不过反爬虫技术的存在只是增加网络爬虫的成本而已,所以爬取些有更有价值的内容,也就对得起技术得投入。

1案例选取

人有1/3的时间在工作,有一个开心的工作,那么1/3的时间都会很开心。所以我选取招聘网站来作为我第一个学习的案例。

前段时间和一个老同学聊天,发现他是在从事交互设计(我一点也不了解这是什么样的岗位),于是乎,我就想爬取下前程无忧网(招聘网_人才网_找工作_求职_上前程无忧)上的交互设计的岗位需求:

2实现过程

我这里使用scrapy框架来进行爬取。

2.1程序结构

C:\Users\hyperstrong\spiderjob_jiaohusheji │scrapy.cfg

└─spiderjob

│ items.py

│ pipelines.py │ settings.py │ __init__.py

│ middlewares.py

├─spiders

│ jobSpider.py

│ __init__.py

其中:

items.py是从网页抽取的项目

jobSpider.py是主程序

2.2链接的构造

用浏览器打开前程无忧网站 招聘网_人才网_找工作_求职_上前程无忧,在职务搜索里输入“交互设计师”,搜索出页面后,观察网址链接:

【交互设计师招聘】前程无忧手机网_触屏版

/jobsearch/search_result.php?fromJs=1&k eyword=%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1%E5%B8%88&keywordty pe=2&lang=c&stype=2&postchannel=0000&fromType=1&confirmdate=9 网址链接中并没有页码,于是选择第二页,观察链接:

红色标记的为页码,于是可以通过更改此处数字来实现从“第1页”到第44页“的网页自动跳转。当然读者也可以通过网页内容抓取处下一页的链接进行自动翻页,有兴趣的网友可以试下:

2.3网页分析

我要抓取的几个数据分别是

职位名

公司名

工作地点

薪资

发布时间

截图如下,右侧是浏览器-开发者工具(F12)里查找的源代码,和网页对应查看:

2.4数据字段:items.py

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

# Define here the models for your scraped items

# See documentation in:

# /en/latest/topics/items.html

import scrapy

class SpiderjobItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

jobname = scrapy.Field()

companyname= scrapy.Field()

workingplace= scrapy.Field()

salary= scrapy.Field()

posttime= scrapy.Field()

2.5主要运行程序

我是用的python2.7编写的,并且使用XPath表达式进行数据的筛选和提取。

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

from scrapy import Request

from scrapy.spiders import Spider

from spiderjob.items import SpiderjobItem

class jobSpider(Spider):

name ='jobSpider'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER',

'Accept':'text/css,*/*;q=0.1',

'Accept-Encoding':'gzip, deflate, sdch',

'Accept-Language':'zh-CN,zh;q=0.8',

'Referer':'close',

'Host':''};

def start_requests(self):

url1 =

'/list/000000,000000,0000,00,9,99,%25E4 %25BA%25A4%25E4%25BA%2592%25E8%25AE%25BE%25E8%25AE%25A1%25E5%2 5B8%2588,2,'

url2 =

'.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&d egreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1& ord_field=0&confirmdate=9&fromType=1&dibiaoid=0&address=&line= &specialarea=00&from=&welfare='

url = url1 +'1'+ url2

yield Request(url, headers=self.headers)

def parse(self, response):

item = SpiderjobItem()

jobs =

response.xpath('//div[@class="dw_table"]/div[@class="el"]') for job in jobs:

item['companyname'] = job.xpath(

'.//span[@class="t2"]/a[@target="_blank"]/text()').extract()[0 ]

item['workingplace'] = job.xpath(

'.//span[@class="t3"]/text()').extract()[0]

相关文档
最新文档