爬取百度招聘信息

爬取百度招聘,链接:https://talent.baidu.com/external/baidu/index.html#/social/2
首先我们先打开链接看一下数据是否在响应的html源码中,打开之后我们宁没有发现,那他就是动态加载的,

在这里插入图片描述
在这里插入图片描述

这时我们就找到了,通过ajax进行加载,我们直接对这个链接进行发送请求 https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9&recruitType=2&pageSize=10&curPage=1&keyWord=&_=1611122380527,这时我们发现 work_palce是工作地址,curPage是当前页,我们直接开始写代码,这是一个json数据,我们使用json模块进行loads一下转换为字典,方便我们取值
import requests
import json
import csv


class Baidu(object):
    def __init__(self):
        self.url = 'https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9&recruitType=2' \
                   '&pageSize=10&curPage=1&keyWord=&_=1608559330677 '
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/87.0.4280.88 Safari/537.36 '
        }

    def get_data(self):
        response = requests.get(url=self.url, headers=self.headers)
        print(response.url)
        return response

    def parse_data(self,response):
        data = json.loads(response.content)
        data_list = data["postList"]
        data_node = list()
        for node in data_list:
            temp= {}
            try:
                temp['序列'] = node["postId"]
            except:
                temp['序列'] = None
            try:
                temp['工作名称'] = node["name"]
            except:
                temp['工作名称'] =None
            try:
                temp['日期'] = node["publishDate"]
            except:
                temp['日期'] = None
            try:
                temp['类型'] = node["postType"]
            except:
                temp['类型'] = None
            try:
                temp['工作地址'] = node["workPlace"]
            except:
                temp['工作地址'] = None
            try:
                temp['工作经验'] = node["workYears"]
            except:
                temp['工作经验'] = None
            try:
                temp['人数'] = node["recruitNum"]
            except:
                temp['人数'] = None
            try:
                temp['工作类型'] = node["workType"]
            except:
                temp['工作类型']  = None
            try:
                temp['学历'] = node["education"]
            except:
                temp['学历'] = None
            try:
                temp['描述'] = node["serviceCondition"].replace("<br>-","").replace('\r','').replace('-','')
            except:
                temp['描述'] = None
            try:
                temp['工作要求'] = node["workContent"].replace("<br>-","").replace('\r','').replace('-','')
            except:
                temp['工作要求'] = None
            try:
                temp['公司名字'] = node["orgName"]
            except:
                temp['公司名字'] = None
            data_node.append(temp)
        return data_node

    def save_data(self,data_node):
                for data in data_node:
                    csv_writer.writerow([data['序列'],data['工作名称'],data['日期'],data['类型'],data['工作地址'],data['工作经验'],data['人数'],data['工作类型'],data['学历'],
                                 data['描述'],data['工作要求'],data['公司名字']])


    def run(self):
        response = self.get_data()
        data_node = self.parse_data(response)
        self.save_data(data_node)


if __name__ == '__main__':
    head = ['序列', '工作名称', '日期', '类型', '工作地址', '工作经验', '人数', '工作类型', '学历',
            '描述', '工作要求', '公司名字']
    with open('百度招聘.csv', 'a', newline='', encoding="gb18030") as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow(head)
        baidu = Baidu()
        baidu.run()

我们现在能拿到一页的数据了,我们再看下链接变化:
第一页:https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9&recruitType=2&pageSize=10&curPage=1&keyWord=&_=1611122380527
第二页:https://talent.baidu.com/baidu/web/httpservice/getPostList?postType=&workPlace=0%2F4%2F7%2F9&recruitType=2&keyWord=&pageSize=10&curPage=2&keyWord2=&_=1611122990856
我们会发现curPage是控制页码的,那我们就直接拼接成,代码如下:
    def next_page(self):
        for i in range(2, 243):
            next_url = 'https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9' \
                       '&recruitType=2&pageSize=10&curPage={}&keyWord=&_=1608559330677'.format(i)
            self.url = next_url
            response = self.get_data()
            data_node = self.parse_data(response)
            self.save_data(data_node)
这样就实现了翻页效果,并且把数据存到了csv,方便以后的读取和使用,至于上边为什么try、except,是因为在取值的时候有些为空,抛出异常,那我们就阻止抛出异常!
总代码如下:
import requests
import json
import csv


class Baidu(object):
    def __init__(self):
        self.url = 'https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9&recruitType=2' \
                   '&pageSize=10&curPage=1&keyWord=&_=1608559330677 '
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/87.0.4280.88 Safari/537.36 '
        }

    def get_data(self):
        response = requests.get(url=self.url, headers=self.headers)
        print(response.url)
        return response

    def parse_data(self,response):
        data = json.loads(response.content)
        data_list = data["postList"]
        data_node = list()
        for node in data_list:
            temp= {}
            try:
                temp['序列'] = node["postId"]
            except:
                temp['序列'] = None
            try:
                temp['工作名称'] = node["name"]
            except:
                temp['工作名称'] =None
            try:
                temp['日期'] = node["publishDate"]
            except:
                temp['日期'] = None
            try:
                temp['类型'] = node["postType"]
            except:
                temp['类型'] = None
            try:
                temp['工作地址'] = node["workPlace"]
            except:
                temp['工作地址'] = None
            try:
                temp['工作经验'] = node["workYears"]
            except:
                temp['工作经验'] = None
            try:
                temp['人数'] = node["recruitNum"]
            except:
                temp['人数'] = None
            try:
                temp['工作类型'] = node["workType"]
            except:
                temp['工作类型']  = None
            try:
                temp['学历'] = node["education"]
            except:
                temp['学历'] = None
            try:
                temp['描述'] = node["serviceCondition"].replace("<br>-","").replace('\r','').replace('-','')
            except:
                temp['描述'] = None
            try:
                temp['工作要求'] = node["workContent"].replace("<br>-","").replace('\r','').replace('-','')
            except:
                temp['工作要求'] = None
            try:
                temp['公司名字'] = node["orgName"]
            except:
                temp['公司名字'] = None
            data_node.append(temp)
        return data_node

    def save_data(self,data_node):
                for data in data_node:
                    csv_writer.writerow([data['序列'],data['工作名称'],data['日期'],data['类型'],data['工作地址'],data['工作经验'],data['人数'],data['工作类型'],data['学历'],
                                 data['描述'],data['工作要求'],data['公司名字']])

    def next_page(self):
        for i in range(2, 243):
            next_url = 'https://talent.baidu.com/baidu/web/httpservice/getPostList?workPlace=0%2F4%2F7%2F9' \
                       '&recruitType=2&pageSize=10&curPage={}&keyWord=&_=1608559330677'.format(i)
            self.url = next_url
            response = self.get_data()
            data_node = self.parse_data(response)
            self.save_data(data_node)


    def run(self):
        response = self.get_data()
        data_node = self.parse_data(response)
        self.save_data(data_node)
        self.next_page()


if __name__ == '__main__':
    head = ['序列', '工作名称', '日期', '类型', '工作地址', '工作经验', '人数', '工作类型', '学历',
            '描述', '工作要求', '公司名字']
    with open('百度招聘.csv', 'a', newline='', encoding="gb18030") as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow(head)
        baidu = Baidu()
        baidu.run()

希望大家多多点赞支持!!!!
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用JS爬取百度地图商家信息,我们可以使用一些常见的爬虫工具和技术。 首先,我们需要使用Node.js环境来运行我们的JS脚本。Node.js提供了一些非常有用的模块,如`request`和`cheerio`,可供我们发起HTTP请求并处理HTML页面。 我们可以使用`request`模块来发送GET请求,获取百度地图商家信息的网页源代码。例如,我们可以发送一个GET请求到特定的URL,并获取到对应页面的HTML内容。 接下来,我们可以使用`cheerio`模块来解析这个HTML内容。`cheerio`模块提供了类似于jQuery的API,可以方便地从HTML文档提取我们需要的数据。 首先,我们可以使用`cheerio`模块的`load`方法来加载HTML内容。然后,我们可以使用类似于CSS选择器的方式,来获取特定的DOM元素。例如,我们可以使用类似于`$('.class-name')`的语法来获取指定类名的DOM元素。 在我们获取到DOM元素后,我们可以使用`.text()`或`.html()`方法来获取所需的文本或HTML内容。然后,我们可以将这些数据保存起来,或者进行其他操作,比如存储到数据库或导出为CSV文件。 需要注意的是,我们应该遵守网站的使用条款和规定。在爬取百度地图商家信息之前,我们应该确保充分了解相关法律法规,并尽量不会对目标网站的服务器性能造成不必要的影响。 总之,使用JS爬取百度地图商家信息可以借助Node.js环境、`request`模块和`cheerio`模块来实现。通过发送GET请求获取HTML页面,然后使用`cheerio`模块解析HTML内容,我们可以轻松地提取所需的商家信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值