智联招聘爬虫(简易版本……)

1.主要工具

——————————————————————————————————————
语言使用python3.来实现,主要使用的库(sqlite3、lxml、requests)

2.网页解析部分

——————————————————————————————————————
示例代码用来简单提取智联招聘中职位、公司以及薪资数据,如下图~

智联招聘爬虫(简易版本……)_第1张图片
image.png
[链接][( https://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%9D%AD%E5%B7%9E&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&sm=0&p=1),由于时间不是很充裕,这篇文章中将略过文本爬取的介绍,本次示例使用lxml进行网页解析,不是很熟悉的同学可以去看看崔大大的教程,或者到lxml官网去看示例代码。

3.代码

—————————————————————————————————————

import requests 
from lxml import etree

#定义获得html并使用etree加工的函数
def get_html_page(url):
  r = requests.get(url)
  page = etree.HTML(r.text.encode('utf-8').decode('utf-8','ignore'))
  return page
#获得上图中职位信息的函数
def jobs(page):
  jobs_reg = u'//table[@cellpadding="0"]//a[@style="font-weight: bold"]'
  jobs_s = page.xpath(jobs_reg)
  s = [value.xpath('string()') for value in jobs_s]
  return s
#获得公司信息的函数
def companies(page):
  companies_reg = u'//table[@cellpadding="0"]//td[@class="gsmc"]'
  companies_s = page.xpath(companies_reg)
  s = [value.xpath('string()') for value in  companies_s]
  return s
#获得薪水信息的函数
def salary(page):
  salary_reg =u'//table[@cellpadding="0"]//tr/td[@class="zwyx"]' 
  salary_s = page.xpath(salary_reg)
  s = [value.xpath('string()') for value in salary_s ]
  return s

这一段代码主要用来实现网页数据获取以及提取目标数值,因为只是一个简单的示例,所以爬取网页部分不涉及请求分析、header构造以及有可能出现的乱码问题。OK,做一些简单的赋值之后,很容易拿到我们需要的三列数据(实际上是三个列表,ps:最初我尝试过直接使用s = [value.xpath('string()') for value in page.xpath(jobs_reg)]做列表生成式,但是最后得出s不是一个列表,而是一个func,不知是什么原因,希望大家帮忙解决一下)。

OK,拿到数据之后,下一步要进行存储的工作,最简单的方法是使用csv或者pandas这两个包生成CSV文件,进阶的存到数据库里面,这样你后期处理会方便很多,本次示例将使用sqlite3做数据存储。

import sqlite3

global conn
global cursor 
conn = sqlite3.connect('zhilian.db')
cursor = conn.cursor()           
cursor.execute('create table job (id integer PRIMARY KEY autoincrement, jobs varchar(20) ,company varchar(30),salary varchar(15) )')
#运行函数
url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%9D%AD%E5%B7%9E&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&sm=0&p=1'   
page = get_html_page(url)

jobs = jobs(page) 
companies = companies(page)
salary = salary(page)
#数一下生成的列表有多少数
count_num = len(jobs)
#下边就开始保存到数据库 
global i
i = 0
for i in range(count_num):    
    sql = 'insert into job(id ,jobs,company,salary) values(?,?,?,?)'   
    cursor.execute(sql,(i,jobs[i],companies[i],salary[i]))
    i=i+1
conn.commit()

最后找个图形化的数据库处理软件(我用的是DB Browser for sqlite),查一下刚才保存成功的数据~


智联招聘爬虫(简易版本……)_第2张图片
image.png

后续我会写一个复杂的版本———————待————————填——————————坑————————

你可能感兴趣的:(智联招聘爬虫(简易版本……))