目录
一、分析网站
这是Boss直聘网站的首页
比如说我们需要一个市场营销的工作岗位信息(如下图):
我们发现有很多的岗位,接下来分析网页,右击网页,点击检查或者按F12,选择network或者是网络,找到下图所示位置
我们继续看每个岗位的url就会发现其中的参数就在上面体现
其中只有encryptJobId、lid、securityId在变化,所以在此页面只需要获取到这几个值,就可以得到该页面的所以岗位的url
接下来分析岗位页面,同样右击网页,点击检查或者按F12
我们需要的岗位名称、岗位薪资、岗位描述、以及岗位职责
分析页面源代码
我们可以通过 BeautifulSoup和正则表达式来获取到页面信息
二、源码
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
# 需要更换Cookie
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Cookie': ''
}
def get_urls():
url = r'https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=%E5%B8%82%E5%9C%BA%E8%90%A5%E9%94%80&city=100010000&experience=&payType=&partTime=°ree=&industry=&scale=&stage=&position=&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30'
global headers
response = requests.get(url=url,headers=headers)
urls = []
if response.json()['message'] == 'Success':
zpData = response.json()['zpData']
joblist = zpData['jobList']
for job in joblist:
joburl = 'https://www.zhipin.com/job_detail/' + job['encryptJobId'] + '.html?' +\
'lid=' + job['lid'] + '&securityId=' + job['securityId'] + '&sessionId='
urls.append(joburl)
print(urls)
return urls
def get_data():
urls = get_urls()
global headers
for url in urls:
response = requests.get(url=url, headers=headers)
# print(response.text)
data_list = BeautifulSoup(response.text, 'lxml')
# 岗位关键词
keyword_list = data_list.find(class_='job-keyword-list').find_all('li')
job_keyword_list = []
for job_keyword in keyword_list:
job_keyword = str(job_keyword).replace("<li>", "").replace("</li>", "")
job_keyword_list.append(job_keyword)
# 岗位职责
job_sec_text = str(data_list.find(class_='job-sec-text'))
job_sec_text_list = re.findall('\d、+(.*?);', job_sec_text)
# 岗位薪资
salary_str = str(data_list.find(class_='salary'))
salary = re.findall('<span class="salary">(.*?)<\/span>', salary_str)[0]
if __name__ == '__main__':
get_urls()
注意:当短时间内爬取次数太多,会访问不了,这时需要更换Cookie, 你也可以使用time.sleep()来降低爬虫时间,来保证不会认为是爬重