一、获取某讯岗位标题数据
1.单页数据获取
首先,我们的目标是从腾讯招聘网站获取岗位标题信息。以下是获取单页岗位标题的代码:
import requests
# 获取单页数据
# 控制输入页码数,给到变量page 默认字符串
page = input("请输入你想要查询的页面:")
# 用f插值法 将变量page放在pageIndex中,将输入的内容通过f插值法给到参数pageIndex
url = f'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1763539137582&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=1&keyword=&pageIndex={page}&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/137.0.0.0 Safari/537.36'
}
# 因为是网页页面是get请求方式,所以用get请求方式
res = requests.get(url, headers=headers)
# 因为返回的响应结果像是字典类型的字符串数据 所以用json方法
res_data = res.json()
count = 1
# 利用for循环,遍历res_data中字典Data中的Posts列表的每一个列表元素给到变量i
for i in res_data['Data']['Posts']:
# 推荐用内置方法get 获取目标数据的值,如果存在能获取,不存在就返回空值
RecruitPostName = i.get('RecruitPostName', '') # 岗位名字
LocationName = i.get('LocationName', '') # 岗位地址
RequireWorkYearsName = i.get('RequireWorkYearsName', '') # 工作经历年限
Responsibility = i.get('Responsibility', '') # 岗位职责
print(count,RecruitPostName, LocationName, RequireWorkYearsName, Responsibility,sep='|') # sep属性是print内置参数 用于控制多个输出参数之间的分隔符。
count += 1
res_data响应数据
在这段代码中,我们通过用户输入的页码构建请求URL,然后使用requests库发送请求。利用res.json()方法将响应数据转换为字典类型,最后通过循环遍历Posts列表,获取每个岗位的标题。
2.多页数据获取
如果要获取多页数据,我们可以使用循环来实现。以下是获取10页岗位标题的代码:
import time
import requests
# 获取多页数据 10页数据
for page in range(1,11): #利用for循环遍历从 1 到 10 的整数序列,每次循环将当前值赋给变量 page。
# 用f插值法 将变量page放在pageIndex中,将输入的内容通过f插值法给到参数pageIndex
url = f'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1763539137582&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=1&keyword=&pageIndex={page}&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/137.0.0.0 Safari/537.36'
}
# 因为是网页页面是get请求方式,所以用get请求方式
res = requests.get(url, headers=headers)
# 因为返回的响应结果像是字典类型的字符串数据 所以用json方法
res_data = res.json()
count = 1
# 利用for循环,遍历res_data中字典Data中的Posts的每一个列表元素给到变量i
for i in res_data['Data']['Posts']:
count += 1
print(f'这是获取的第{page}页数据')
'''
这里我们使用for循环生成1到10的页码,每次循环构建不同的URL并发送请求。
解析响应数据后,打印出岗位标题和序号。如果需要放慢请求速度,可以使用
time.sleep(2)让程序休眠
2秒。
'''
time.sleep(2)
这里我们使用for循环生成1到10的页码,每次循环构建不同的URL并发送请求。解析响应数据后,打印出岗位标题和序号。如果需要放慢请求速度,可以使用time.sleep(2)让程序休眠2秒。
3.获取未知页数据
当我们不知道数据有多少页时,可以使用无限循环,并设置结束条件。以下是获取腾讯岗位标题的完整代码:
import time
import requests
# 获取未知页数据
# 定义初始页面设置为1 从第一页开始进入循环
page = 1
while True: # 条件为真则一直循环
# 用f插值法 将变量page放在pageIndex中,将输入的内容通过f插值法给到参数pageIndex
url = f'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1763539137582&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=1&keyword=&pageIndex={page}&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/137.0.0.0 Safari/537.36'
}
# 因为是网页页面是get请求方式,所以用get请求方式
res = requests.get(url, headers=headers)
# 因为返回的响应结果像是字典类型的字符串数据 所以用json方法
res_data = res.json()
# 如果res_data['Data']['Posts']为空值,第86页获取不到数据,
# 所以返回的结果是None则终止while循环
if res_data['Data']['Posts'] is None:
break
count = 1
# 利用for循环,遍历res_data中字典Data中的Posts的每一个列表元素给到变量i
for i in res_data['Data']['Posts']:
# 推荐用内置方法get 获取目标数据的值,如果存在能获取,不存在就返回空值
RecruitPostName = i.get('RecruitPostName', '') # 岗位名字
LocationName = i.get('LocationName', '') # 岗位地址
RequireWorkYearsName = i.get('RequireWorkYearsName', '') # 工作经历年限
Responsibility = i.get('Responsibility', '') # 岗位职责
print(count, RecruitPostName, LocationName, RequireWorkYearsName, Responsibility,sep='|') # sep属性是print内置参数 用于控制多个输出参数之间的分隔符。
count += 1
print(f"这是获取的第{page}页数据")
page += 1
time.sleep(1)
获取某瓣冒险电影数据
1.目标请求与数据解析
我们要从豆瓣电影网站获取剧情类型电影的信息。以下是获取指定页电影信息的代码:
import requests
url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'
}
res = requests.get(url,headers=headers)
res_data = res.json()
count = 1
for i in res_data:
title = i.get('title','') # 电影名
actors_li = i.get('actors','') # 制作人
# 因为得到的是列表类型数据,列表里面是字串数据,用join拼接法将列表里面数据拼接起来
actors = (',').join(actors_li)
release_date = i.get('release_date','') # 播出时间
score = i.get('score','') # 得分
print(count,title,actors,release_date,score,sep='|')
count += 1
在这段代码中,我们首先定义了请求的URL和请求头,使用user-agent来伪装成浏览器请求。发送请求后,将响应数据转换为列表类型,然后循环遍历列表,打印出电影的标题、评分和演员信息。
2.获取未知页数据
由于不知道豆瓣冒险电影有多少页,我们可以使用无限循环来获取全部数据。以下是完整代码:
import requests
# 观察滑动页面url的变化
# start 每滑动一面 start增加20
page = 0
pages = 1
while True: # 条件为真无限循环
url = f'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={page}&limit=20'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'
}
res = requests.get(url, headers=headers)
res_data = res.json()
# 当res_data为空列表时,就终止循环
if res_data == []:
break
count = 1
for i in res_data:
title = i.get('title', '') # 电影名
actors_li = i.get('actors', '') # 制作人
# 因为得到的是列表类型数据,列表里面是字串数据,用join拼接法将列表里面数据拼接起来
actors = (',').join(actors_li)
release_date = i.get('release_date', '') # 播出时间
score = i.get('score', '') # 得分
print(count, title, actors, release_date, score, sep='|')
count += 1
print(f'这是获取的第{pages}页数据')
page += 20
pages += 1
这里我们使用whileTrue实现无限循环,每次循环根据start参数构建不同的URL并发送请求。当响应数据为空列表时,说明没有更多电影数据了,使用break语句跳出循环。同时,每次循环结束后,将start参数增加20,以获取下一页的数据。