今天学习爬虫的网址是:https://sou.zhaopin.com/?jl=489&sf=0&st=0
(智联招聘网)
爬虫思路还是跟以前一样:一、找到网址入口请求访问获取网页字符串;二、解析数据;三、整理数据存档。
这里使用了第三方库requests
我这次实验中没有选定城市
获取网页字符串
1、在该网站上寻找需要的资源信息在哪里、发现,我们所需要的数据都在某一职业的招聘简介里。于是首先要获取每一职业简历的url。
2、寻找url规律的时候发现,pageSize参数是控制了每一页的数量,而start则是每一页的开端。改变start即可。
def crawl(self, count):
crawl_url = 'https://fe-api.zhaopin.com/c/i/sou?start={}&pageSize=90&cityId=489'.format(count)
response = self.response(crawl_url, self.headers) # 获取字符串
url_list = self.parse(response) # 解析每一职业建立的url存储到变量url_list
for url in url_list:
content = self.getContent(url)
self.save(content) # 对每一页内存进行存储
解析数据
1、看到了主界面的网页字符串发现该类型可以用json来进行解析。
def parse(self, response):
try:
res = json.loads(response.text)['data']['results']
if res:
url_list = []
for data in json.loads(response.text)['data']['results']:
job_url = data['positionURL']
url_list.append(job_url)
return url_list
except:
return None
2、解析每一职业信息的数据,发现数据可以用正则提取。
def parseSecond(self, response):
try:
res = re.findall('<script>__INITIAL_STATE__=(.*?)</script>', response.text, re.S)[0]
res_json = json.loads(res)['jobInfo']['jobDetail']['detailedPosition']
item_json = {}
detail = {}
c_add = res_json['workCity']
c_num = res_json['recruitNumber']
c_money = res_json['salary60']
c_name = res_json['name']
c_company = res_json['companyName']
detail['公司名称'] = c_company
detail['工作城市'] = c_add
detail['招聘人数'] = c_num
detail['工资情况'] = c_money
item_json['name'] = c_name
item_json['detail'] = detail
return item_json
except:
return None
整理并存储数据
1、再编写一个main来理下逻辑。
def main(self):
count = 0
for page in range(0, 10000, 90):
self.crawl(page)
count += 1
print(count)
2、存储的话,在crwal方法里有调用到save。
def save(self, content):
# print(content)
with open(path + "智联招牌网.json", "a", encoding='utf-8') as fp:
fp.write(str(content) + ',')
效果图
注:本人技术有限,这个网址最多只爬取了1080条数据。共显示12页,每页90条。
如发现可以改进的地方或者哪里做得不好,希望大家能够提出多多交流。