欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫-爬取boss直聘的职位信息

程序员文章站 2022-04-26 09:59:54
...

爬取boss直聘的相应的职位信息:

一个同学今天想找工作,问我有什么好单位,关键我也不清楚,于是我去各大招聘网站搜索了下,有很多招聘信息,看的我眼花缭乱,刚看完的职位,忘记收藏又过去搜索,感觉太麻烦,于是就想着把内容爬取下来,慢慢看,慢慢分析,先从boss直聘开始爬取。

具体代码如下

import requests
from lxml import etree
import urllib3
urllib3.disable_warnings()
import time

# proxy = {
#     'http':'123.54.47.203:9999',
# }
# 获取第一个url
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
}

def get_details_url(base_url,location='hangzhou',engineer='自动化测试',page=1):
    locations = {'xian':'c101110100','hangzhou':'c101210100'}
    url = base_url + '/' + locations[location] + '/'
    print(url)
    # 发送请求获取页面源码
    # params = 'query={}&page={}&ka=page-{}'.format(engineer,page,page) 这种方式好像不行,不知道为什么
    params = {'query':engineer,
              'page':page,
              'ka':'page'+'-'+ str(page)}
    res = requests.get(url=url,headers=headers,params=params,verify=False)
    # print(res.content.decode("utf-8"))
    result = res.content.decode("utf-8")

    # 解析页面内容为html文档树结构
    html = etree.HTML(result)
    lis = html.xpath('//div[@class="job-list"]/ul/li')
    # print(lis)
    # 获得返回的详情页面的url
    detail_urls = []
    for li in lis:
        detail_url = li.xpath('.//div[@class="primary-box"]/@href')[0]
        detail_url = base_url + detail_url
        # print(detail_url)
        detail_urls.append(detail_url)
    return detail_urls

base_url = 'https://www.zhipin.com'
print(get_details_url(base_url))
details_url = get_details_url(base_url)

# 爬取详情页面的内容薪水和职位和公司

results = []
datas={}
for detail_url in details_url[:5]:
    time.sleep(5)
    res = requests.get(url=detail_url,headers=headers,verify=False)
    # print(res.content.decode("utf-8"))
    result = res.content.decode("utf-8")
    # print(res.status_code)
    html = etree.HTML(result)
    divs = html.xpath("//div[@class='job-primary detail-box']//div[@class='info-primary']//div[@class='name']")
    # print(divs)
    eng = divs[0].xpath('./h1/text()')[0]
    salary = divs[0].xpath('./span/text()')[0]

    company_dec = html.xpath('//div[@class="job-box"]//div[@class="inner home-inner"]')[0]
    company = company_dec.xpath('.//div[@class="job-sider"]//div[@class="company-info"]/a[1]/@title')[0]
    office_decription = company_dec.xpath('.//div[@class="detail-content"]//div[@class="job-sec"]//div[@class="text"]/text()')[0]
    datas['company'] = company
    datas['office_decription'] = office_decription
    datas['eng'] = eng
    datas['salary'] = salary
    for i,j in datas.items():
        datas[i] = str(j).strip().strip('\\n')
    # print(datas)
    results.append(datas)

print(results)

本次爬取遇到的问题:
1.输出的网页源码信息看着不是我想要的?

解决方式:添加cookie信息(通过f12抓包获取,然后添加到请求头中),顺便说下什么是cookie,cookie是服务端为了识别用户的身份,在客户第一次访问服务器后,服务端在客户端本地存取的一些数据(也叫session跟踪,一般不大于4kb),用户访问其他链接时就会带上cookie信息

cookie的格式如下
python爬虫-爬取boss直聘的职位信息
2.为什么爬两次就又爬取不到了?

解决方式:这是因为网站设置了反爬虫机制,所以在爬取时,可以试试添加等待时间,以更大程度的模拟真实用户的场景

3.爬取的次数多了,可能被网站识别,有可能造成访问不了人家网址了,该如何解决?

解决方式:可以通过设置代理ip
python爬虫-爬取boss直聘的职位信息