python爬虫(一)---智联招聘实战

智联校园招聘数据爬取

1 本次实验只爬取一页内容,适合入门学习xpath,excel文件写入。
2 url =‘https://xiaoyuan.zhaopin.com/full/538/0_0_160000_1_0_0_0_1_0’
3 结尾会附上全部代码
大神请绕过本博客

(一) xpath基础知识

含义:xpath可以用在xml文档中对元素和属性值进行遍历,在网络爬虫中,只用xpath采集数据。
xpath有7种类型的节点:元素,属性,文本,命名空间,处理指令,诠释,文档节点

  • 路径表达式
表达式 含义
nodeName 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档节点,不考虑它们位置
. 选取当前节点
选取当前节点的父节点
@ 选取属性
* 匹配任何元素节点
@* 匹配任何属性节点
Node() 匹配任何类型节点
  • 用xpath练习
 <div class="searchResultList clearfix">
        <ul class="searchResultListUl">
                <li>
                    <div class="searchResultItemDetailed" pid="CC000130700J90000003000" datecreated="12/4/2018 1:12:00 AM" companytype="国企">
                        <p class="searchResultJobName">

                                <a target="_blank" joburl href="//xiaoyuan.zhaopin.com/job/CC000130700J90000003000?traceId=s06d8dfa5d490830848f00b204e9800998&scenario=1&jobSourceType=0&pageIndex=1&position=1" class="fl __ga__fullResultcampuspostname_clicksfullresultcampuspostnames_001">嵌入式软件 测试a>

                                <span class="oTips oTips4 fl">校园招聘span>
                                                                                                            p>
                            <p class="searchResultCompanyname"><span>中国电子科技集团公司第三十二研究所-基础软件部span>p>
                        <p class="searchResultJobAdrNum">
                            <span class="searchResultKeyval">
                                <i class="nicon niconAdr">i>
                                <span>城市:<em class="searchResultJobCityval">上海em>span>
                            span>
                            <span class="searchResultKeyval">
                                <i class="nicon niconReleasetime">i>
                                <span>发布时间:<em>昨天em>span>
                            span>
                        p>
                        <p class="searchResultCompanyInfodetailed">
                                <span class="searchResultKeyval">
                                    <span>公司类型:<em>国企em>span>
                                span>
                                <span class="searchResultKeyval">
                                    <span>公司规模:<em>500-999人em>span>
                                span>
                            <span class="searchResultKeyval">
                                <span>所属行业:<em>政府/公共事业/非盈利机构 计算机软件 IT服务(系统/数据/维护)em>span>
                            span>
                            <span class="searchResultKeyval">
                                <span>职位类别:<em>软件工程师em>span>
                            span>
                            <span class="searchResultKeyval">
                                    <span>招聘人数:<em>若干em>span>

                            span>
                        p>
                        <p class="searchResultCompanyWelfare">
                        p>
                        <p class="searchResultJobdescription">
                            职责描述:<span>1、硕士/本科;2、计算机、自动化、电子工程、机电、工业控制等相关专业,具备嵌入式软件开发经验者优先;3、熟悉Linux或UCOS等嵌入式操作系统,熟练使用gcc、gdb等编译、调试工具,掌握软件工程基础知识,掌握软件测试的基本理论和技术;4、具有较强的团队精神和责任心,学习能力较强,能吃苦耐劳,具备较强的沟通协作能力...span>
                        p>

                            <a target="_blank" href="//xiaoyuan.zhaopin.com/job/CC000130700J90000003000?traceId=s06d8dfa5d490830848f00b204e9800998&scenario=1&jobSourceType=0&pageIndex=1&position=1" class="searchResultSeemore __ga__fullResultcampuspostmore_clickfullresultcampuspostmore_001">查看更多>>a>
                    div>

                    <div class="showHideBtn">

                        <span class="__ga__fullResultpostunfold_clickfullresultpostunfold_001">
                            展开
                        span>
                        <i class="nicon niconShowhide">i>
                    div>

                li>
                <li>

针对上面html源码训练如下:

#导入lxml中的etree模块
#lxml能将字符串或流转化成ElementTree类型,也能将ElementsTree--> str
from lxml import etree
text = '''上面的html代码复制在这'''
#利用etree.HTML将字符串解析成HTML文档的elementstree类型
html = etree.HTML(text)
#例如:提取公司类型
# 1 首先看公司类型在哪(所属标签) 如上HTML代码是span标签 #
# 2 发现不止有公司类型是这个标签,还有公司规模,所属行业点等,此时就要进行步骤3
# 3 再找此内容所在标签的父节点即如上代码中span的父节点是 

# 4 根据索引取得所要得到的公司类型 # 代码解释: #//:如上表格所说从当前节点选取,不考虑位置,即p节点开始 #[@class=" "]:指定当前p标签的class #text() :选取节点内容 companies = html.xpath('//p[@class="searchResultCompanyInfodetailed"]/span[@class="searchResultKeyval"][1]/span/em/text()') #同理可以选取别的值,按需进行即可

(二)完整代码

import requests
import xlwt
from lxml import etree
#不加次header会拒绝访问,这是伪造头信息,去访问网页
header={
   "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
url = 'https://xiaoyuan.zhaopin.com/full/538/0_0_160000_1_0_0_0_1_0'
re = requests.get(url,headers=header)
#print(re.text)
#re和re.text类型不一样。etree.HTML只能解析str类型
#print(type(re.text))
#print(type(re))
 
html = etree.HTML(re.text)
print(type(html))

#---------------------解析网页,提取城市,职位,人数,公司类型,发布时间-----------
items = []
#找城市
cities = html.xpath('//p[@class="searchResultJobAdrNum"]/span[@class="searchResultKeyval"][1]/span/em/text()')
items.append(cities)
#发布时间
times = html.xpath('//p[@class="searchResultJobAdrNum"]/span[@class="searchResultKeyval"][2]/span/em/text()')
items.append(times)
#工作,选择p标签下的span内容,但是span的class都是一样的名字,只能用下标索引所要抽取的职位类型的em中的值
jobs = html.xpath('//p[@class="searchResultCompanyInfodetailed"]/span[@class="searchResultKeyval"][4]/span/em/text()')
items.append(jobs)
#招聘人数
numbers = html.xpath('//p[@class="searchResultCompanyInfodetailed"]/span[@class="searchResultKeyval"][5]/span/em/text()')
items.append(numbers)
#公司类别
companies = html.xpath('//p[@class="searchResultCompanyInfodetailed"]/span[@class="searchResultKeyval"][1]/span/em/text()')
items.append(companies)
#职位描述
description = html.xpath('//p[@class="searchResultJobdescription"]/span/text()')
items.append(description)
#-------------------------------------创建文件---------------------------------
#文件名称
newFile = "ZhiLian.xls"
#创建excel 文件 ,声明编码为utf-8
wb = xlwt.Workbook(encoding='utf-8')
#创建表格
ws = wb.add_sheet('sheet1')

#表头信息
headData = ['城市','职位','公司类型','招聘人数','发布时间','职责描述']

#写入表头信息
for column in range(0,6):
    ws.write(0,column,headData[column],xlwt.easyxf('font:bold on'))
#将所获得的信息添加到excel文件中

# -----------------------------写入文件---------------------------------------
#将爬取的信息写入excel中 按列存储
for i in range(0,len(items)):
    for j in range(1,len(items[i])):
        ws.write(j,i,items[i][j]) 
wb.save(newFile)


输出内容:
python爬虫(一)---智联招聘实战_第1张图片

(三)总结:

本文主要将xpath的方式解析网页,因为本人今天才真正正式学习爬虫,代码比较臃肿,还有那个items.append添加内容有点繁琐,后期我继续努力,看看有没有好的方法,本人下篇博客将爬取多个网页,并将代码进行封装。不会显得零散,可读性比较差。

(四)致谢:

感谢如下博客提供的参考:
https://blog.csdn.net/u011486491/article/details/84061432
https://blog.csdn.net/u010187278/article/details/77847737?locationNum=10&fps=1#网页分析

你可能感兴趣的:(python爬虫,爬虫)