1.采集数据网站:boss直聘
为避免打广告嫌疑,自行前往官网查看
2.网站分析
搜索条件较上一篇51要多一点,但是提交参数原理都是一样的
那么我们就下抓取职位为python,范围为全国的数据,其他也不限
对网站数据查看,都在源码里
3.对构造url,请求
url:
https://www.zhipin.com/c100010000/?query=python&page=1&ka=page-1
直接请求发现请求不过数据来,
那么就对请求方式及请求头等进行分析,发现参数没有什么特别的地方,就分析请求头,携带了一个cookie,那么就带上吧,发现带上后...
是可以请请求到数据的
4.编写代码:
# -*- coding: UTF-8 -*-
'''
@Author :Jason
'''
import requests
from time import sleep
from lxml import etree
import random
from urllib.parse import quote
import csv
class Boss():
def __init__(self):
# 这个url前面是固定的主站域名 + 地区编号(暂时定为全国就不改了) + 查询词 + 页数 + 负的页数
self.bash_url = "https://www.zhipin.com/c100010000/?query="+"search_text"+"&page="+"page_num"+"&ka=page-"+"page_num"
self.proxies = random.choice([
#我的代理池,
])
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'}
def get_info(self):
search_text = input("请输入想要查询的职位:")
encode_search_text = quote(str(search_text))
cookie_dict = {}
cookie = 'lastCity=101010100; __c=1577099728; __g=-; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D6qIB6tnnO4bbTEy4OgymN0OLz2T7jEs1bIOggJ6JCOwfjvzNjoF_LMICDoRv0ReD%26wd%3D%26eqid%3Dfe051a5c0013a37e000000045e00a1cd&friend_source=0&friend_source=0; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1577099728,1577100137; __a=57714439.1577099728..1577099728.16.1.16.16; __zp_stoken__=fab0SNjGDZ%2BPKE153aV5BYG6FFCYoMsFMUrkxGnAdQ15UfsYeCJCXGlKmrjtyCWsKA5%2FEnhiPUKj0VPKtxxXJU206K6FvIg82vcCMKWuKOzd9YBaStE%2FIcfeR40m1QEv8PLL; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1577101514'
for i in cookie.split(';'):
cookie_dict[i.split('=')[0]] = i.split('=')[1]
for page_num in range(1,2):#翻页数,自定义
start_url = self.bash_url.replace("search_text",str(encode_search_text)).replace("page_num",str(page_num))
res = requests.get(start_url,headers=self.headers,proxies=self.proxies,cookies=cookie_dict)
res.encoding = "utf-8"
parseHtml = etree.HTML(res.text)
position_list = parseHtml.xpath('//div[@class="job-title"]/text()')
salary_list = parseHtml.xpath('//span[@class="red"]/text()')
address_list = parseHtml.xpath('//div[@class="info-primary"]/p[1]/text()')
company_list = parseHtml.xpath('//div[@class="company-text"]//h3[@class="name"]/a/text()')
#皮一下,让你白建个文件,我这里存到txt文档中
for i,p in enumerate(position_list):
with open(r'./boss.txt',"a",encoding="utf-8",errors="ignore") as f:
f.write(p+" "+salary_list[i]+" "+address_list[i]+" "+
company_list[i]+"\n")
if __name__ == "__main__":
with open('boss直聘职位数据表.csv', 'a', newline='') as f:
f = csv.writer(f)
f.writerow(('职位', '薪水', '地点', '公司名称'))#就不采集这么多数据了,职位薪水地点公司名,其他需要的自行增加
boss = Boss()
boss.get_info()
5.采集的部分字段及其效果
此采集时间为2019-12-23.网站可能变更迭代,脚本不一定长期有效
声明: 采集仅源自个人兴趣爱好,数据集仅供个人使用,不涉及商用,侵权联系删除。