首页 > 其他分享 >贝壳项目,入库及去重

贝壳项目,入库及去重

时间:2024-07-16 17:08:53浏览次数:12  
标签:贝壳 项目 url text list scool gaozhong second 入库

import time

import requests
from lxml import etree

from 常用功能.mongodb链接 import connect_mongodb

user_value = 'bk_spider'
pwd_value = 'ke@spider01'
mongo_id_value = '119.45.40.170'
port_value = 27017
db_value = 'spider'
coll_value = "channel_directional_crawl"
db_coll = connect_mongodb(user_value, pwd_value, mongo_id_value, port_value, db_value, coll_value)
db = db_coll[0]
coll = db_coll[1]


def get_gaozhong_url(num_list: int):
    scool_list = []
    for num in range(1, num_list):

        scool_list.append(f'https://www.hxx.net/school/gaozhong/list_{num}.html')
    return scool_list


def get_chuzhong_url(num_list: int):
    scool_list = []
    for num in range(1, num_list):

        scool_list.append(f'https://www.hxx.net/school/chuzhong/list_{num}.html')
    return scool_list


def get_detail(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
    }
    session = requests.Session()
    html = session.get(url=url, headers=headers).content.decode()
    tree = etree.HTML(html)
    second_url_list = tree.xpath("//div[@class='zhongxueSchList']//li//dt/a/@href")
    scool_name_list = tree.xpath("//div[@class='zhongxueSchList']//li//dt/a/text()")
    for second_url in second_url_list:
        num = second_url_list.index(second_url)
        print(f'第{num}个')
        scool_name = scool_name_list[num]
        second_html = session.get(url=second_url, headers=headers).content.decode()
        second_tree = etree.HTML(second_html)
        # 院校性质
        yuanxiaoxingzhi = second_tree.xpath("//dd/span[contains(text(), '院校性质')]/text()")
        yuanxiaoxingzhi = ''.join(yuanxiaoxingzhi).replace('院校性质:', '')
        # 办学层次
        banxuecengci = second_tree.xpath("//dd/span[contains(text(), '办学层次')]/i/text()")
        banxuecengci = ''.join(banxuecengci)
        # 学校形式
        xuexiaoxingshi = second_tree.xpath("//dd/span[contains(text(), '学校形式')]/text()")
        xuexiaoxingshi = ''.join(xuexiaoxingshi).replace('学校形式:', '')
        # 建校时间jianxiaoshijian
        jianxiaoshijian = second_tree.xpath("//div[@class='dl']/dd[2]/span[2]/i/text()")
        jianxiaoshijian = ''.join(jianxiaoshijian)
        # 学校地址xuexiaodizhi
        xuexiaodizhi = second_tree.xpath("//div[@class='dl']/dd[4]/span/text()")
        xuexiaodizhi = ''.join(xuexiaodizhi).replace('学校地址:', '')
        # 使用 XPath 提取评分信息
        pf_div = second_tree.xpath('//div[@class="pf"]')[0]  # 找到 class="pf" 的 div 元素

        if pf_div is not None:
            text = pf_div.xpath('string()').strip()  # 获取 div 元素内的文本内容,并去除首尾空白字符

            # 使用正则表达式提取分数
            import re
            pattern = r'环境(\d+\.\d+)分\s*师资(\d+\.\d+)分\s*服务(\d+\.\d+)分\s*效果(\d+\.\d+)分'
            match = re.search(pattern, text)

            if match:
                # 热度
                redu=second_tree.xpath('//dt/span/text()')[0]
                # 环境评分
                huanjingpingfen = match.group(1)
                huanjingpingfen = ''.join(huanjingpingfen)
                # 师资评分
                shizipingfen = match.group(2)
                shizipingfen = ''.join(shizipingfen)
                # 服务评分
                fuwupingfen = match.group(3)
                fuwupingfen = ''.join(fuwupingfen)
                # 效果评分
                xiaoguopingfen = match.group(4)
                xiaoguopingfen = ''.join(xiaoguopingfen)
                # 学校简介
                jianjie = second_tree.xpath(
                    '//div[@class="schoo_introduction nomargintop"]/div[@class="content"]//text()')
                jianjie = ''.join(jianjie).replace('\ue614点击展开','').replace('\u3000','')
                dict1 = {
                    'task_name': '好学校',
                    'domain': 'https://www.hxx.net/',
                    'url': 'https://www.hxx.net/',
                    'ts': int(time.time()),
                    'tag': '',
                    'channal': '好学校',
                    'quality': '非官方',
                    # 会修改
                    'batch': 'batch  20240711_batch_1',
                    # 240711渠道名,会修改
                    # json/240711/全国各省-城市-中学.json
                    # 文件类型/渠道名/上传到cos的文件名
                    # key值,也是文件类型,渠道,标题,后缀的集合
                    #  a.网页端目录命名: html / {网站英文名or缩写or拼音} / {网页title
                    # or其他可标识内容}.html
                    # b.视频: videos / {渠道(比如douyin)} / {title}.mp4
                    # c.图片: IMG / {渠道} / {title}.jpg
                    # d.PDF: PDF / {渠道} / {title}.pdf
                    # e.excel: excel / {渠道} / {title}.xlsx
                    # f.json: json / {渠道} / {title}.json
                    # cos_url构成:https://data-crawler-1325559378.cos.ap-beijing.myqcloud.com/文件类型/渠道名/上传到cos的文件名
                    'cos_url': 'https://data-crawler-1325559378.cos.ap-beijing.myqcloud.com/json/240711/全国各省-城市-中学.json',
                    'meta': {'一级分类': '教育配套',
                             '二级分类': '学校基础信息',
                             '三级分类': '全国',
                             '性质': '非官方',
                             '信息来源': '好学校',
                             '说明': '全国各省-城市-中学',
                             '链接': 'https://www.hxx.net/'
                             },
                    'content': {
                        '学校名称': scool_name,
                        '详情页链接': second_url,
                        '院校性质': yuanxiaoxingzhi,
                        '办学层次': banxuecengci,
                        '学校形式': xuexiaoxingshi,
                        '建校时间': jianxiaoshijian,
                        '学校地址': xuexiaodizhi,
                        '热度': redu,
                        '环境评分': huanjingpingfen,
                        '师资评分': shizipingfen,
                        '服务评分': fuwupingfen,
                        '效果评分': xiaoguopingfen,
                        'ocr_content': f'学校名称:{scool_name},热度:{redu},环境评分:{huanjingpingfen},师资评分:{shizipingfen}服务评分:{fuwupingfen},效果评分:{xiaoguopingfen}'+jianjie,
                    }

                }
                # python中mongodb判断某字段的值是否存在
                print({"content['学校名称']": scool_name})
                count = coll.count_documents({"content.学校名称": scool_name})
                print(count)
                if count != 0:
                    print(f"{scool_name}已存在")
                    print('\n')
                else:
                    # coll.insert_one(dict1)
                    print(f'{scool_name}插入完成')
                    print('\n')


if __name__ == '__main__':
    gaozhong_url_list = get_gaozhong_url(1103)
    chuzhong_url_list = get_chuzhong_url(189)
    print(f'gaozhong_url_list:{gaozhong_url_list}')
    for gaozhong_url in gaozhong_url_list:
        print(f'gaozhong_url:{len(gaozhong_url),gaozhong_url}')
        get_detail(gaozhong_url)

    # print(f'chuzhong_url_list:{chuzhong_url_list}')
    # for chuzhong_url in chuzhong_url_list:
    #     get_detail(chuzhong_url)

  

标签:贝壳,项目,url,text,list,scool,gaozhong,second,入库
From: https://www.cnblogs.com/wolvies/p/18305679

相关文章

  • 【Django】网上蛋糕项目商城-购物车和我的订单功能
    1.购物车功能在首页中的滚动栏的商品,热门商品,新品,以及商品详情中都有加入购物车按钮在models文件中创建购物车表,用于保存当前用户添加的商品信息#购物车表classShoppingCar(models.Model):#用户iduserId=models.IntegerField()#商品idgoodsId=......
  • idea打开/导入maven项目 + 移除
    ——————如何导入方法1————右侧maven——》点击加号   找到要但如项目的pom.xml文件——》ok 方法2————file——》projectstructure……modeles——》加号 importmodule  找到要导入项目的pom.xml文件——》ok 右下角apply——》ok ......
  • 【C++】链表相关的项目(2.0)
    链表相关的项目1.0需要请点击       ---------------------------------------------------准备工作首先弄几个可能会需要的头文件:#include<stdio.h>#include<stdlib.h>#include<string.h>typedefintADT;//定义自定义数据类型​​因为写的是关于......
  • 在 JeecgBoot 项目中基于 Vue 3 配置多页面入口
    在现代Web开发中,使用Vue框架构建项目已经成为一种常见的选择。而JeecgBoot作为一个优秀的后台管理系统框架,也提供了丰富的功能和组件,方便开发人员快速搭建企业级应用。本文将介绍如何在JeecgBoot项目中基于Vue3配置多页面入口,实现更灵活的页面管理和定制化需求。前提......
  • 【分享贴】项目管理中,成员任务进度总是推不动,怎么办?
    最近,公司内部举办了一次项目案例分享会,有位同事提了一个比较常见的项目管理痛点。他说,不知道是不是自己影响力不够,项目成员的任务进度总是推不动,每天催来催去,但是一点进展都没有,最后不仅团队成员不满,领导和客户也不满意。这个话题引起了大家的热议,纷纷开启吐槽模式,例如每次项目任......
  • idea 查看项目的git路径
    目录第一种方式:第二种方式:第三种方式:第一种方式:1、打开项目,在工程上右键,选择ShowinExplorer;如下图:2、此时会打开本地的代码路径窗口;如下图:3、双击工程,会出现git目录文件夹;4、双击进去git目录,打开config文件夹;5、文件里面的url属性即为git地址;第二种方式:1、......
  • 字节跳动内网开源的《Python项目开发实战》,GitHub飙升!
    今天给小伙伴们分享的这份手册的内容共15个章节,总共可以分为四个部分。第一部分,主要讲“Python开发入门”,这部分将重点放在了个人开发上,涵盖了简单的web应用开发和Python项目结构等。第二部分,主要讲“团队开发周期”,介绍书中的极客们在多人团队开发中遇到的问题,以及如何提......
  • React+TS前台项目实战(三十)-- 首页构建之基于react-query和性能hook实现全页面数据渲染
    文章目录前言一、效果展示二、首页源码+详细注释说明+技术分析1.页面功能分析2.代码+详细注释总结前言前三篇文章详细介绍了首页的响应式布局,采用关注点分离进行模块拆解,现在只需按需引入模块,页面更加简洁,代码的维护性得到提升。今天将进入首页的收尾阶段,即完成......
  • 基于Java+SpringBoot+Vue的创新创业教育中心项目申报管理系统的设计与开发(源码+lw+部
    文章目录前言项目背景介绍技术栈后端框架SpringBoot前端框架Vue数据库MySQL(MyStructuredQueryLanguage)具体实现截图详细视频演示系统测试系统测试目的系统功能测试系统测试结论代码参考数据库参考源码获取前言......
  • 第二部分:关键技术领域的开源实践【项目管理和缺陷跟踪工具】
    项目管理和缺陷跟踪工具不仅是项目成功的基石,也是企业提升竞争力、优化运营和满足客户需求的关键手段。通过这些工具,企业能够更加系统化和专业化地管理项目,提高整体业务效率和效益。项目管理和缺陷跟踪工具,国内许多中小型企业使用开源版本的禅道来进行管理。本文的企业开源实践选......