IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 爬取厦门人才网(python爬虫) -> 正文阅读

[Python知识库]爬取厦门人才网(python爬虫)

一、数据来源

爬取网站是厦门人才网:

http://www.xmrc.com.cn/net/info/resultg.aspx?
要爬取的内容包括了相关职业的职位名称、详情链接、招聘公司、参考薪水、工作地点、学历要求以及发布时间

二、导入库

使用urllib.request发送请求 from lxml import etree

通过xpath解析DOM树的时候会使用lxml的etree,可以从html源码中得到想要的内容

所以先导入这两个库

import urllib.request  
from lxml import etree 

三、定义类

定义一个Spider类,也就是爬虫类,在类中除了定义构造方法,再定义一个方法,用来接收html的内容。

class Spider(object):  # 定义一个Spider类
    def __init__(self):  # 构造方法
        # 起始页位置
        self.begin_page = int(input("请输入起始页:"))
        # 终止页位置
        self.end_page = int(input("请输入终止页:"))
        # 基本URL
        self.base_url = "http://www.xmrc.com.cn/net/info/resultg.aspx?"

    def load_page(self):  # 定义一个方法,用来接收html的内容
        """
            @brief 定义一个url请求网页的方法
            @param page 需要请求的第几页
        """
        # 添加User-Agent字段对发出的请求进行伪装
        user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Trident / 5.0"
        headers = {"User-Agent": user_agent}
        # 找到url的规律循环每一页的内容
        # 第一页是http://www.xmrc.com.cn/net/info/resultg.aspx?=position.php?&start=20&PageIndex=1
        # 第二页是http://www.xmrc.com.cn/net/info/resultg.aspx?=position.php?&start=20&PageIndex=2
        html_list = []  # 用来存放html源码的列表
        for page in range(self.begin_page, self.end_page + 1):
            url = self.base_url + "=position.php?&start=20&PageIndex=" + str(page)
            request = urllib.request.Request(url, headers=headers)
            # 获取每页HTML源码字符串
            response = urllib.request.urlopen(request)
            # 指定utf-8编码格式解码字符串
            html = response.read().decode("utf-8")
            # print(html)  # 用来测试爬取的html是否成功
            html_list.append(html)  # 把每一个html放到一个空列表中,以便后面读取后再解析
        return html_list  # 返回html的列表,里面的每一个元素都是一个html源码

    # 使用lxml库解析网页数据
    def parse_page(self, list):  # 参数list是传入一个html的列表
        """
            @brief      定义一个解析网页的方法
            @param html 服务器返回的网页HTML
        """
        items = []  # 定义空列表,以保存元素的信息
        for every_html in list:  # 依次取出html
            # 从字符串中解析HTML文档或片段,返回根节点
            root = etree.HTML(every_html)
            # 查找所有的职位名称
            names = root.xpath("//tr[@class='bg']/td[2]/a")
            # 查找所有的详情链接
            links = root.xpath("//tr[@class='bg']/td/a/@href")
            # 查找所有的招聘公司
            company = root.xpath("//tr[@class='bg']/td[3]/a")
            # 查找所有的参考薪水
            salary = root.xpath("//tr[@class='bg']/td[5]/a")
            # 查找所有的工作地点
            locations = root.xpath("//tr[@class='bg']/td[4]/a")
            # 查找所有的学历要求
            education = root.xpath("//tr[@class='bg']/td[6]/a")
            # 查找所有的发布时间
            publish_times = root.xpath("//tr[@class='bg']/td[7]/a")
            for i in range(0, len(names)):  # 循环一共有多少个职位的次数
                item = {}  # 创建空字典
                # 写入键值对,通过lxml库解析网页的数据填入对应的值,并使用.strip()去掉空格
                item["职位名称"] = names[i].text.strip()
                item["详情链接"] = self.base_url + links[i]
                item["招聘公司"] = company[i].text.strip()
                item["参考薪水"] = salary[i].text.strip()
                item["工作地点"] = locations[i].text.strip()
                item["学历要求"] = education[i].text.strip()
                item["发布时间"] = publish_times[i].text.strip()
                items.append(item)
        # print(len(items))   # 用来测试数据条数是否正确,一个页面是30条数据,依次类推
        return items  # 返回列表,列表的每一个元素是一个招聘的字典

    def save_file(self, items):  # 把字典里的数据保存到一个txt文件中
        """
            @brief       将数据追加写进文件中

            @param html 文件内容
        """
        file = open('tencent.txt', "wb+")  # 打开文件,以二进制的方式写入
        file.write(str(items).encode())  # 写入数据
        file.close()  # 关闭文件

以上注释里都写得很详细,可以适当内容,爬取自己想要的数据

下面附上完整的代码:

# coding=utf-8
import urllib.request  # 使用urllib.request发送请求
from lxml import etree  # 通过xpath解析DOM树的时候会使用lxml的etree,可以从html源码中得到想要的内容


class Spider(object):  # 定义一个Spider类
    def __init__(self):  # 构造方法
        # 起始页位置
        self.begin_page = int(input("请输入起始页:"))
        # 终止页位置
        self.end_page = int(input("请输入终止页:"))
        # 基本URL
        self.base_url = "http://www.xmrc.com.cn/net/info/resultg.aspx?"

    def load_page(self):  # 定义一个方法,用来接收html的内容
        """
            @brief 定义一个url请求网页的方法
            @param page 需要请求的第几页
        """
        # 添加User-Agent字段对发出的请求进行伪装
        user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Trident / 5.0"
        headers = {"User-Agent": user_agent}
        # 找到url的规律循环每一页的内容
        # 第一页是http://www.xmrc.com.cn/net/info/resultg.aspx?=position.php?&start=20&PageIndex=1
        # 第二页是http://www.xmrc.com.cn/net/info/resultg.aspx?=position.php?&start=20&PageIndex=2
        html_list = []  # 用来存放html源码的列表
        for page in range(self.begin_page, self.end_page + 1):
            url = self.base_url + "=position.php?&start=20&PageIndex=" + str(page)
            request = urllib.request.Request(url, headers=headers)
            # 获取每页HTML源码字符串
            response = urllib.request.urlopen(request)
            # 指定utf-8编码格式解码字符串
            html = response.read().decode("utf-8")
            # print(html)  # 用来测试爬取的html是否成功
            html_list.append(html)  # 把每一个html放到一个空列表中,以便后面读取后再解析
        return html_list  # 返回html的列表,里面的每一个元素都是一个html源码

    # 使用lxml库解析网页数据
    def parse_page(self, list):  # 参数list是传入一个html的列表
        """
            @brief      定义一个解析网页的方法
            @param html 服务器返回的网页HTML
        """
        items = []  # 定义空列表,以保存元素的信息
        for every_html in list:  # 依次取出html
            # 从字符串中解析HTML文档或片段,返回根节点
            root = etree.HTML(every_html)
            # 查找所有的职位名称
            names = root.xpath("//tr[@class='bg']/td[2]/a")
            # 查找所有的详情链接
            links = root.xpath("//tr[@class='bg']/td/a/@href")
            # 查找所有的招聘公司
            company = root.xpath("//tr[@class='bg']/td[3]/a")
            # 查找所有的参考薪水
            salary = root.xpath("//tr[@class='bg']/td[5]/a")
            # 查找所有的工作地点
            locations = root.xpath("//tr[@class='bg']/td[4]/a")
            # 查找所有的学历要求
            education = root.xpath("//tr[@class='bg']/td[6]/a")
            # 查找所有的发布时间
            publish_times = root.xpath("//tr[@class='bg']/td[7]/a")
            for i in range(0, len(names)):  # 循环一共有多少个职位的次数
                item = {}  # 创建空字典
                # 写入键值对,通过lxml库解析网页的数据填入对应的值,并使用.strip()去掉空格
                item["职位名称"] = names[i].text.strip()
                item["详情链接"] = self.base_url + links[i]
                item["招聘公司"] = company[i].text.strip()
                item["参考薪水"] = salary[i].text.strip()
                item["工作地点"] = locations[i].text.strip()
                item["学历要求"] = education[i].text.strip()
                item["发布时间"] = publish_times[i].text.strip()
                items.append(item)
        # print(len(items))   # 用来测试数据条数是否正确,一个页面是30条数据,依次类推
        return items  # 返回列表,列表的每一个元素是一个招聘的字典

    def save_file(self, items):  # 把字典里的数据保存到一个txt文件中
        """
            @brief       将数据追加写进文件中

            @param html 文件内容
        """
        file = open('tencent.txt', "wb+")  # 打开文件,以二进制的方式写入
        file.write(str(items).encode())  # 写入数据
        file.close()  # 关闭文件


if __name__ == '__main__':  # 主函数,程序的入口
    # 测试正则表达式/ lxml库/ bs4库
    spider = Spider()  # 创建Spider的对象
    html_list = spider.load_page()  # 调用load_page()返回赋给html_list
    return_items = spider.parse_page(html_list)  # 调用parse_page()返回赋给return_items
    # 调用save_file()把数据保存到文件中
    spider.save_file(return_items)

结果图:

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:35:07  更:2021-08-06 09:35:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 7:09:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码