又到一年一度的秋招了,受疫情的影响,就业难度大大增加,今天爬取2w前程无忧的招聘信息,看看有什么工作适合你。
前程无忧网址:https://search.51job.com/
本次爬取的信息包括广州,佛山、深圳、珠海、中山这五个城市的招聘信息。
具体链接:
https://search.51job.com/list/030200%252c040000%252c030500%252c030600%252c030700,000000,0000,00,9,99,+,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=1&dibiaoid=0&line=&welfare=
按照惯例,先点击下一页,看看链接是否发现变化。点击下一页后发现链接.html前面的1发生了变化。
再鼠标右键查看网页源代码,发现数据都在源代码中,基本可以确定是静态网页了。
这时还需要注意的是,虽然数据在网页源代码中,但是网页源代码的网页标签是和点击鼠标右键检查中看到的网页结构是不同的,所以需要要re正则表达式提取网页数据。
import requests
import re
import xlwt
import time
job_name_t_data = []
job_href_url_data = []
company_name_data = []
providesalary_text_t_data = []
attribute_text_t_data = []
jobwelf_list_data = []
updatedate_data = []
headers = {
'User-Agent': 'Googlebot'
}
for i in range(1, 401):
url = 'https://search.51job.com/list/030200%252c040000%252c030500%252c030600%252c030700,000000,0000,00,9,99,+,2,{}.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=1&dibiaoid=0&line=&welfare='.format(i)
time.sleep(2)
response = requests.get(url, headers=headers).text
Googlebot是谷歌的网页抓取机器人,类似于中国的百度蜘蛛,加进User-Agent里,可以轻松的跳过一些网站的反爬虫措施。
网页结构有的像json数据,所以直接复制数据以及前面的标签下来,用.*?万能匹配进行提取。
# 详情页链接
job_href = re.findall(r'"job_href":"(.*?)"', response)
# 替换链接中的斜杠
job_href_url = [i.replace(r'\/', '/') for i in job_href]
# 职位名称
job_name = re.findall('"job_name":"(.*?)"', response)
job_name_t = [x.replace(r'\/', '/') for x in job_name]
# 公司名称
company_name = re.findall('"company_name":"(.*?)"', response)
# 薪资
providesalary_text = re.findall('"providesalary_text":"(.*?)"', response)
providesalary_text_t = [x.replace(r'\/', '/') for x in providesalary_text]
# 工作地址/经验要求/学历要求/招聘人数
attribute_text = re.findall(r',"attribute_text":.*?(.*?)],', response)
attribute_text_t = [x.replace(r'\/', '/').replace('[', '') for x in attribute_text]
# 福利
jobwelf_list = re.findall('"jobwelf":"(.*?)"', response)
#发布时间
updatedate = re.findall('"updatedate":"(.*?)"', response)
一个一个的遍历数据并保存在列表中。
for a,b,c,d,e,f,j in zip(job_name_t,company_name,providesalary_text_t,attribute_text_t,jobwelf_list,updatedate,job_href_url):
job_name_t_data.append(a)
company_name_data.append(b)
providesalary_text_t_data.append(c)
attribute_text_t_data.append(d)
jobwelf_list_data.append(e)
updatedate_data.append(f)
job_href_url_data.append(j)
#创建工作簿
work_book = xlwt.Workbook(encoding='utf-8')
#创建名为招聘信息工作表
sheet = work_book.add_sheet('招聘信息')
#创建标题行
cool = ('职位名称', '公司名称', '薪资', '工作地址/经验要求/学历要求/招聘人数', '福利', '发布时间', '详情页链接')
#遍历cool,一个一个的传入招聘信息工作表的第一行
for i in range(0, 7):
sheet.write(0, i, cool[i])
#抓取2w条招聘数据
for i in range(0, 20000):
sheet.write(i + 1, 0, job_name_t_data[i])
sheet.write(i + 1, 1, company_name_data[i])
sheet.write(i + 1, 2, providesalary_text_t_data[i])
sheet.write(i + 1, 3, attribute_text_t_data[i])
sheet.write(i + 1, 4, jobwelf_list_data[i])
sheet.write(i + 1, 5, updatedate_data[i])
sheet.write(i + 1, 6, job_href_url_data[i])
work_book.save('招聘信息.xls')
预览下数据,包括标题行一共2万条数据。
本文代码较为粗糙,有很多可以简洁的地方,适合新手入门。
前程无忧的网站和大部分的静态网页不同,前端代码与后端代码不相同,所以需要认真的分析网页,不然可能掉进网页的反爬虫的陷阱里。
个人认为,写爬虫最重要的一点是分析网页,如果网页没有分析对,可能你再怎么写都是做无用功。按照爬虫的基本步骤进行写爬虫是个很好的习惯,能大大的提高写爬虫的效率。
注:本文仅用于学习以及知识交流!如果侵权,请告知删除!
本文分享自 Python与Excel之交 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!