从入门到入土:Python爬虫学习|实例练手|详细讲解|爬取腾讯招聘网|一步一步分析|异步加载|初级难度反扒处理|寻找消失的API来找工作吧

本文介绍了如何使用Python爬虫抓取腾讯招聘网站的数据。通过分析网页接口,发现数据以JSON格式异步加载。通过requests库获取接口数据,再利用json模块解析字典嵌套列表,提取职位信息,包括职位名称、国家、地点、部门、产品、类别、职责、更新时间和链接。最终实现了对数据的提取和输出。
摘要由CSDN通过智能技术生成

此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
本人博客所有文章纯属学习之用,不涉及商业利益。不合适引用,自当删除!
若被用于非法行为,与我本人无关
仅用于学习交流,若用于商业行为或违法行为,后果自负

Python爬虫学习||爬取腾讯招聘网

情况说明

  • 爬取的目标为这儿
  • 是腾讯的招聘网站
  • 使用了一个新的思路

步骤说明

  • 元素寻找

  • 基本元素就是这样子
    在这里插入图片描述

  • 老规矩F12查看一下位置
    在这里插入图片描述

  • 然后尝试用requests基本方法获取网页html源码看看

def get_txzp():
    for i in range(1):
        url='https://careers.tencent.com/search.html'
        rs = requests.session()
        r = rs.get(url, headers=headers)
        r.encoding = 'utf-8'
        #soup = BeautifulSoup(r.content, 'lxml')
        #trees = etree.HTML(r.text)
        m=r.text
        print(r.text)

在这里插入图片描述

  • 运行之后,发现源码里说明都没有
  • 考虑可能是异步加载
  • 在F12界面刷新观看network的发送过来的包的内容
    在这里插入图片描述
  • 很好,没有加密
  • 那我们就直接访问这个接口看看是什么情况
    在这里插入图片描述
  • 试试看更换url爬取网页源码
import requests


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
def get_txzp():
    for i in range(1):
        url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1631625383162&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'.format(
            i)

        rs = requests.session()
        r = rs.get(url, headers=headers)
        r.encoding = 'utf-8'
        #soup = BeautifulSoup(r.content, 'lxml')
        #trees = etree.HTML(r.text)
        m=r.text
        print(r.text)

get_txzp()

在这里插入图片描述

  • 基本该有的都有
  • 并且还是一个多层字典嵌套列表
  • 那就一层一层来
  • 不过可以确定的是不需要使用bs4以及etree等解析源码方式
  • 尝试使用字典提取“Data”
    在这里插入图片描述
  • 报错
  • 检查之后发现这是个字典,但不完全是个字典,因为它目前的形式是字符串
  • 所以我们通过json将这一串转换成字典使用
		m=r.text
        M = json.loads(m)
        a=type(m)
        A=type(M)
        print(a)
        print(A)

在这里插入图片描述

  • 转换成功
  • 进行依次提取
		m=r.text
        M = json.loads(m)
        M1 = M["Data"]
        M2 = M1['Posts']
        print(m)
        print(M1)
        print(M2)

在这里插入图片描述

  • 提取到M2是一个列表
  • 在这个列表下一层是每一组元素构成的字典
  • 那就先依次输出列表的元素
import json
import requests


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
    'cookie':'_ga=GA1.2.741549489.1600008709; pgv_pvi=8093896704; pgv_pvid=378075616; _gcl_au=1.1.1666053754.1630843983; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100011930117%22%2C%22first_id%22%3A%22e22e55959d05db4ed0929acd767433c8%40devS%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E8%85%BE%E8%AE%AF%E4%BA%91%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Fother.php%22%2C%22%24latest_utm_medium%22%3A%22cpd%22%7D%2C%22%24device_id%22%3A%2217868f4b2442e6-0dbd0c103fbeda-5771031-1327104-17868f4b24578c%22%7D; loading=agree; UserCookie=b5e8696d89c9be7cc87d70e96edd126db7eb028fdd9de3cd81f85e53c10ccf0c; IsLogin=1'
}
def get_txzp():
    for i in range(1):
        url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1631625383162&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'.format(
            i)

        rs = requests.session()
        r = rs.get(url, headers=headers)
        r.encoding = 'utf-8'
        #soup = BeautifulSoup(r.content, 'lxml')
        #trees = etree.HTML(r.text)
        m=r.text
        M = json.loads(m)
        M1 = M["Data"]
        M2 = M1['Posts']
        for j in M2:
            print(j)

get_txzp()

在这里插入图片描述

  • 按照字典名依次提取内容并保存在一个列表内输出
M1 = M["Data"]
        M2 = M1['Posts']
        for i in M2:
            data = []
          
            data.append(i['RecruitPostName'])
            data.append(i['CountryName'])
            data.append(i['LocationName'])
            data.append(i['BGName'])
            data.append(i['ProductName'])
            data.append(i['CategoryName'])
            data.append(i['Responsibility'])
            data.append(i['LastUpdateTime'])
            data.append(i['PostURL'])
            print(data)

在这里插入图片描述

  • 这边输出有点不太整齐,完整代码会整理一下

完整代码

from lxml import etree
from bs4 import BeautifulSoup
import requests
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
    'cookie':'_ga=GA1.2.741549489.1600008709; pgv_pvi=8093896704; pgv_pvid=378075616; _gcl_au=1.1.1666053754.1630843983; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100011930117%22%2C%22first_id%22%3A%22e22e55959d05db4ed0929acd767433c8%40devS%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E8%85%BE%E8%AE%AF%E4%BA%91%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Fother.php%22%2C%22%24latest_utm_medium%22%3A%22cpd%22%7D%2C%22%24device_id%22%3A%2217868f4b2442e6-0dbd0c103fbeda-5771031-1327104-17868f4b24578c%22%7D; loading=agree; UserCookie=b5e8696d89c9be7cc87d70e96edd126db7eb028fdd9de3cd81f85e53c10ccf0c; IsLogin=1'
}

def get_txzp():
    for c in range(1,11):
        url='https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1631625383162&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'.format(c)
        rs = requests.session()
        r = rs.get(url, headers=headers)
        r.encoding = 'utf-8'
        #soup = BeautifulSoup(r.content, 'lxml')
        #trees = etree.HTML(r.text)
        m=r.text
        M=json.loads(m)
        M1=M["Data"]

        M2=M1['Posts']

        for i in M2:
            print("="*300)
            data=[]
            #print(i)
            #print(i['RecruitPostName']+' '+i['CountryName']+' '+i['LocationName']+' '+i['BGName']+' '+i['ProductName']+' '+i[ 'CategoryName']+' '+i['Responsibility']+' '+i['LastUpdateTime']+' '+i['PostURL'])
            data.append(i['RecruitPostName'])
            data.append(i['CountryName'])
            data.append(i['LocationName'])
            data.append(i['BGName'])
            data.append(i['ProductName'])
            data.append(i[ 'CategoryName'])
            data.append(i['Responsibility'])
            data.append(i['LastUpdateTime'])
            data.append(i['PostURL'])

            for j in data:

                print(j)

if __name__ == "__main__":
    get_txzp()

实现结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值