前言
大家好,这里是一个小h的爬虫教程,相信你为什么寻找这篇文章,原因应该是普通的定位爬虫无法对腾讯招聘网站爬取,那么我们废话少说,开始我们的爬虫教学之旅吧,如果本文对你有帮助点点关注,学习技术不迷路,以后将持续为你们更新更有用的知识。
具体思路
下面我们来看一下下面的一张思维导图,同时跟大家分享一下在写一个项目或者题目的时候不能无脑的去敲代码,这只适用于低级的项目,思维永远是解决问题的关键。
那么这个项目的做法实际上只有一种就是通过解析json去实现数据的获取,但是我们可以用两种方法去获得我们要获得的数据,第一个是不使用框架纯手写,第二个就是使用框架Scrapy爬取。
第一种代码
看思路就先从代码开始,我习惯是先看主函数,然后根据主函数深入其他方法,了解思路,逐层破解,话不多说直接上码:
import requests
import json
headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}
def main(url,i):
response=requests.get(url,headers=headers)
#将json字符串转字典,使用字典查找关键字
jsonDic=json.loads(response.text)
result=jsonDic["Data"]["Posts"]
with open('zhiye.txt','a',encoding='utf-8') as f:
for w,x in enumerate(result):
postID=x["PostId"]
postUrl="https://careers.tencent.com/tencentcareer/api/post/ByPostId?postId="+postID #第二次使用爬虫进行网站详细页爬取
resDetail=requests.get(postUrl,headers=headers)
jsonDicDetail=json.loads(resDetail.text) #将json字符串转字典
# 获取需要的信息
RecruitPostName=jsonDicDetail["Data"]["RecruitPostName"] #岗位名称
LastUpdateTime=jsonDicDetail["Data"]["LastUpdateTime"] #工作时间
LocationName=jsonDicDetail["Data"]["LocationName"] #工作地点
f.write(f'{w+1}.工作名称:{RecruitPostName} 工作时间:{LastUpdateTime} 工作地点:{LocationName} \n')
f.write(f'第{i}页--------------------------------------------------\n\n')
if __name__ == '__main__':
# 构造请求url
url="https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1699186390274&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=1&keyword=&pageIndex="
url1="&pageSize=10&language=zh-cn&area=cn"
for i in range(1,11):
main(url+str(i)+url1,i)
实现步骤
对于实现这个爬虫都有一下步骤
- 导入我们需要的requests和json库
- 我们看向主函数,获取该json文件的url并分析规律,具体步骤如下图:
- 获取到url之后我们还要伪装一下我们的请求头,如代码中的headers
- 我们通过分析可以得到,url中的index更我们爬取的页面有关,想要翻页处理我们用一个for循环解决
- 然后进入主函数,将response对象转变成字典对象对于字典我们可以更准确的查找对象
- 进行元素分析,这个步骤很重要我们放在下面一个部分讲解
- 使用with open(‘zhiye.txt’,‘a’,encoding=‘utf-8’) as f:进行数据的保存,保存结果在你创建的目录下
数据解析
1.我们可以先看下面的图片,按照步骤寻找我们要进行下一步爬取的页面和需要的数据:
2.我们得到PostId和postUrl后进行下一次的爬取,因为我们爬取的数据结构格式已经被我们转化成了字典,所以我们不需要进行循环爬取其他元素这一点跟定位爬取不一样。我们再看下一张图:
我们可以看到我们已经进入下一个求职页面了,里面的数据我们要通过字典去访问
RecruitPostName=jsonDicDetail["Data"]["RecruitPostName"]
代码的形式是字典的访问方式
总结
以上就是我们爬取腾讯求职的全部代码和思路,有兴趣的可以关注和在评论区提问哦博主一个小h可以为你解决你的困惑那么以上就是本期的全部内容,下一期我们将讲解用Scrapy爬取腾讯招聘网站哦!关注有惊喜,欢迎在评论区讨论。