python爬虫——使用requests库和xpath爬取猎聘网职位详情

本文介绍了使用Python的requests库和XPath解析库爬取猎聘网职位详情的全过程。从页面分析、代码编写到异常处理,详细讲解了如何获取和解析职位列表页面及详情页面的URL,以及如何处理requests的连接异常。
摘要由CSDN通过智能技术生成

前言

最近闲来无事,使用python的requests库和xpath库爬取了猎聘网的招聘信息。因为只是为了练习,并没有限定职位、地域等信息。

一、页面分析

1.职位列表页面分析

点击进入猎聘网页面如下图所示:上面是职位筛选条件,下面是相应页码
在这里插入图片描述
在这里插入图片描述
点击不同的页码,查看其URL:
第一页URL:
https://www.liepin.com/zhaopin/?init=-1&headckid=3532b9ea0f3b7d78&fromSearchBtn=2&ckid=3532b9ea0f3b7d78&degradeFlag=0&sfrom=click-pc_homepage-centre_searchbox-search_new&key=&siTag=1B2M2Y8AsgTpgAmY7PhCfg%7EfA9rXquZc5IkJpXC-Ycixw&d_sfrom=search_fp&d_ckId=5c45d39e4043f9abb7a6f0d46a73b85f&d_curPage=1&d_pageSize=40&d_headId=5c45d39e4043f9abb7a6f0d46a73b85f&curPage=0

第二页URL:
https://www.liepin.com/zhaopin/?init=-1&headckid=3532b9ea0f3b7d78&fromSearchBtn=2&sfrom=click-pc_homepage-centre_searchbox-search_new&ckid=3532b9ea0f3b7d78&degradeFlag=0&key=&siTag=1B2M2Y8AsgTpgAmY7PhCfg~fA9rXquZc5IkJpXC-Ycixw&d_sfrom=search_fp&d_ckId=5c45d39e4043f9abb7a6f0d46a73b85f&d_curPage=0&d_pageSize=40&d_headId=5c45d39e4043f9abb7a6f0d46a73b85f&curPage=1

通过对比,不难发现,不同页面的RUL的区别在于最后的curPage的值。
不断点击下面的下一页,发现在未登陆的情况下,最多可以查看10页的数据。
在这里插入图片描述

因此,构建爬取要爬取的URL:

for x in range(100):
    start_url = 'https://www.liepin.com/zhaopin/?isAnalysis=&dqs=&pubTime=&jobTitles=N000075%2CN000082%2CN000077&salary=&subIndustry=&industryType=&compscale=&key=&init=-1&searchType=1&headckid=5331cc6c28c3b7cf&compkind=&fromSearchBtn=2&sortFlag=15&ckid=5331cc6c28c3b7cf&degradeFlag=0&jobKind=&industries=&clean_condition=&siTag=1B2M2Y8AsgTpgAmY7PhCfg%7EfA9rXquZc5IkJpXC-Ycixw&d_sfrom=search_prime&d_ckId=4a035a6b6d76db17ef8aca969d0a892a&d_curPage=2&d_pageSize=40&d_headId=4a035a6b6d76db17ef8aca969d0a892a&curPage={}'.format(x)
2.职位详情页面URL获取

进入到职位列表的审查元素
在这里插入图片描述
通过定位我们发现,每个职位都在 class=job-infodiv 标签下的 h3 标签下面的 a 标签,而职位详情的URL即为 a 标签的 href 属性。因此,我们只要获取了所有符合条件的 href 属性,也就获取到了该页所有的职位详情页面的URL。

detil_urls = tree.xpath("//div[@class='job-info']//a[@target='_blank']/@href")
3.职位详情页面分析

在这里插入图片描述
首先,我们可以看到,职位详情页面的请求方式和职位列表页面的请求方式一样,都是通过 get 方法请求。
定位每一个我们要获取的信息,并通过xpath方式获取,如下:
在这里插入图片描述

 title = tree.xpath("//div[@class='title-info']/h1/text()")[0].strip()
                        company = tree.xpath("//div[@class='title-info']/h3/a/text()")[0].strip()
                        salary = tree.xpath("//p[@class='job-item-title']/text()")[0].strip()
                        location = tree.xpath("//p[@class='basic-infor']/span/text()")[0].strip()
                        times = tree.xpath("//p[@class='basic-infor']/time/@title")[0].strip()
                        education = tree.xpath("//div[@class='job-qualifications']//text()")[1].strip()
                        experience = tree.xpath("//div[@class='job-qualifications']//text()")[3].strip()
                        language = tree.xpath("//div[@class='job-qualifications']//text()")[5].strip()
                        age = tree.xpath("//div[@class='job-qualifications']//text()")[7].strip()
                        contents = tree.xpath("//div[@class='content content-word']/text()")
                        contents = list(map(lambda content: content.strip(), contents))
                        contents = "".join(contents)
至此,所有页面解析完毕,开始写代码。

二、代码编写

1.导入相应库
import requests  #请求页面
from lxml import etree  #解析页面
import time  #代码沉睡,防止被发现爬虫,也避免给爬取网站服务器带来压力
import random  #后续设置随机请求头会使用
import csv  #后续将爬取下来的信息保存为csv文件时使用
from random import choice  #设置随机请求头和随机代理时使用
2.设置代理和随机请求头

在爬取时,发现当返回超过一定数据的时候,会返回空数据,猜测可能是网站通过ip或者请求头判断出了此请求可能为爬虫请求,因此设置了代理和随机请求头。

设置代理时,我将可用的代理保存到一个名为 “https_ips_pool.csv” 文件中了。获得代理的代码如下:

def get_proxies(ip_pool_name='https_ips_pool.csv'):
    with open(ip_pool_name, 'r') as f:
        datas = f.readlines()
    ran_num = random.choice(datas)
    ip = ran_num.strip().split(',')
    proxies = {
   ip[0]: ip[1] + ':' + ip[2]}
    return proxies

设置随机请求头时,我对UA进行了设置,将相应的UA保存到 “user_agent.txt” 文件中,获取请求头的代码如下:

def get_headers():
    file = open('user_agent.txt', 'r')
    user_agent_list = file.readlines()
    user_agent = str(choice(user_agent_list)).replace('\n', '')
    user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" if len(user_agent) < 20 else user_agent
    headers = {
   
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "max-age=0",
        "Connection": "keep-alive",
        "Cookie": "__uuid=1576743949178.08; need_bind_tel=false; new_user=false; c_flag=a99aaaa31f739e3b04d3fa768574cabd; gr_user_id=bdb451db-1bc4-4899-a3b3-410b19c06161; bad1b2d9162fab1f80dde1897f7a2972_gr_last_sent_cs1=3872aec89444b8931a667e00ad0d9493; grwng_uid=6c0a08dc-d2e4-407b-b227-89fe9281943e; fe_work_exp_add=true; gr_session_id_bad1b2d9162fab1f80dde1897f7a2972=39311f19-2c25-419e-9a69-64940ae15c78; gr_cs1_39311f19-2c25-419e-9a69-64940ae15c78=UniqueKey%3A3872aec89444b8931a667e00ad0d9493; AGL_USER_ID=15f1f78f-e535-4ccc-8da0-ec0728eb9fb7; abtest=0; __s_bid=5ec9f0f87b044308fb05861763266522a1d4; access_system=C; _fecdn_=1; bad1b2d9162fab1f80dde1897f7a2972_gr_session_id=b500cb67-657d-4f10-9211-7e69d7e319c4; user_roles=0; user_photo=5e7c0e2937483e328d66574804u.jpg; user_name=%E5%B8%B8%E4%BF%8A%E6%9D%B0; fe_se=-1587405434042; Hm_lvt_a2647413544f5a04f00da7eee0d5e200=1586223102,1586753746,1587356899,1587405434; __tlog=1587405434243.54%7C00000000%7CR000000075%7C00000000%7C00000000; UniqueKey=3872aec89444b8931a667e00ad0d9493; lt_auth=7bsJaSdWzg%2Bv4iTRiTBf7fpI3Yr5VmTL%2FX0Mh0gJh4W6W%2FWw4PzqRQiDrbIPxAMhwUxzf8ULNLj5Men%2FznJL7UYQwGmulICyv%2F2k03sEUeVhIsW2vezHg%2FXSQp4ilEAC8nJbpEIL%2BQ%3D%3D; bad1b2d9162fab1f80dde1897f7a2972_gr_last_sent_sid_with_cs1=b500cb67-657d-4f10-9211-7e69d7e319c4; imClientId=deef7ae9f2746887611c3686cabc4d86; imId=deef7ae9f2746887f5aceb762480da5b; imClientId_0=deef7ae9f2746887611c3686cabc4d86; imId_0=deef7ae9f2746887f5aceb762480d
  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值