您的位置:首页 > 运维架构 > 网站架构

爬虫!教你用python里的json分分钟爬取腾讯招聘动态网站求职信息!(结构化数据)

2020-06-05 05:13 267 查看


首先解释一下为什么要导入json跟time模块,打开腾讯招聘网
右键检查点击elements里面的网页元素

来到network里面你会发现当前链接response里面并没有我们想要的数据信息

那么我们开始思考,这会不会是一个动态网页链接
接下来我们点击"XHR"

接下来我们就观察这个可以拿到有效信息的url!
有效的url

我们经过观察发现,该url里面的有效参数有一个timestamp
再一看,我们就发现它是十三位置也就到了毫秒
博主也特意去查了资料
(所谓的时间戳也就是从1970-01-01 00:00:00到现在的时间,如果是十位就是到秒,如果是十三位也就是毫秒)
经过博主的测试,这个十三位数的timestemp就是我们所说的时间戳
以下就是检测是否为时间戳的代码:

**#把时间戳转化为当前时间
# timestemp = 1585231659491#(这里博主给的时间戳可换为你自己电脑该url显示的)
# timearry = time.localtime(float(timestemp)/1000)
# time = time.strftime('%Y-%m-%d %H:%M:%S',timearry)
# print(time)**

我们也可以进一步测试将当前时间进行一个测试

#把当前时间转化为时间戳(time.time()就可以拿到时间戳)
# timestemp = int(time.time())*1000
#重复上面的将时间戳转化为标准化操作
# timearry = time.localtime(float(timestemp)/1000)
# time = time.strftime('%Y-%m-%d %H:%M:%S',timearry)
# print(time)

说了这么多,其实就是一句话
time.time()可以拿到当前时间戳,帮助我们构建url,发送请求
所以要导入时间模块,动态结构化爬虫,所以导入json模块

分析完成,接下来,我们就可以写代码了!

**base_url = "https://careers.tencent.com/tencentcareer/api/post/Query?timestamp={}&parentCategoryId=40002&pageIndex={}&pageSize=10&language=zh-cn&area=cn"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"
}**
#构造分页链接,以及完成url的拼接
**def get_page():
url_list = []
for i in range(10):
url = base_url.format(int(time.time())*1000,i+1)
url_list.append(url)
#         print(url_list)
return url_list**


下面我们着重讲解以上代码
涉及到的唯一一个复杂方法就是json,我们完全可以认为
通过json.loads()这样一个方法就将以上结构化是代码转换成了我们非常熟悉的python的对象{}、以及[ ]

(仔细想想是不是跟我们用正则表达式以及pyquery、BeaytifulSoup、XPath等方法爬取非结构化数据很像呢)

**def run(url_list):
url__list = []
for url in url_list:
#         print(url)
#发送请求
response = requests.get(url=url,headers=headers)
response = response.content.decode('utf-8')
#         print(response)
# #         print(result['Data']['Posts'][3]['RecruitPostName'])
#通过json.loads()这样一个方法就将以上结构化是代码转换成了python里的字典、列表
result = json.loads(response)
#         print(result['Data']['Posts'])
#通过对“字典”的两次操作,我们拿到了一个个含有有效信息的列表
lists = result['Data']['Posts']**

接下来就是通过for循环在该列表里进行拿取我们想要的信息

***for value in lists:
#             print(value)
#拿地址标签
get_location = value['LocationName']
#             print(get_location)

#拿职位标签
get_name = value['RecruitPostName']
#             print(get_name)
#最后更新的时间
get_time = value['LastUpdateTime']
#             print(get_time)

#需具备的能力
get_responsibility = value['Responsibility']
#             print(get_responsibility)***

最后,拼接我们想要的信息,并通过for循环写入文件,为了方便
博主直接存储在了当前文件夹下,存储格式为.doc/txt

(当然,我们也可以存储为csv格式,或者数据库)

简单来说,存储为csv文件只需要导入一个csv模块并且在with后面括号加上newline="",以及encoding=utf-8后面加上-sig,然后创建一个write=csv.writerow()
write(“str”)
而存储到数据库也较为简单,只简述步骤,后面有机会会写到:
1.通过pymysq里的connect方法来连接数据库
2.写sql语句
3.创建游标:cursor
4.通过cursor.execute(sql)操作数据库
5.提交事务:coon.commit()
6.关闭游标
7.关闭数据库

str = get_time+"\n"+get_name+"\n"+get_responsibility+"\n"
url__list.append(str)
for i in url__list:
with open(".\腾讯招聘_设计类.doc","a",encoding="utf-8") as f:
f.write(i+"\n")

方法封装完成,最后进行调用
(当然,你完全可以用类进行封装与写入,思路会更加清晰)



大功告成

爬虫!教你用python里的json分分钟爬取腾讯招聘动态网站求职信息!(结构化数据)

**@author:天玄
@time:2020.03.26**
(注:版权所有,转发请注明作者)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: