吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3056|回复: 10
收起左侧

[Python 转载] Python爬虫 爬取考研信息

[复制链接]
鲨鱼辣椒o 发表于 2022-7-20 20:37
准备考研,就自己捣鼓了爬取考研院校各个专业的信息
想考那个省的,直接输入就ok,代码不是很完善,有能力的大佬就自己动手吧

直接上代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

import requests
import re
import os


class Kaoyan():
    def get_url(self, shen):
        url = 'https://school.kaoyan.cn/jd/school/lists'
        params = {
            'format': 'json',
            'page': 1,
            'province': shen,
            'class': '',
            'type': ''
        }
        resp = requests.get(url, params=params).text.encode().decode('unicode_escape')
        # print(resp.encode().decode('unicode_escape'))
        return resp

    def get_name(self, resp):
        list_name = re.findall('name":"(.*?)"', resp)
        school_id = re.findall('"school_id":"(.*?)"', resp)
        school_xx = dict(zip(list_name, school_id))
        return school_xx

    def get_zhuanye(self, school_xx):
        for i in school_xx:
            url = f'https://school.kaoyan.cn/jd/school/subject?school_id={school_xx}'
            # url = 'https://school.kaoyan.cn/jd/school/subject?school_id=1048'
            resp = requests.get(url).text
            # href = "/jd/school/specialdetail?id=281896" > < p > 机械(航空电子电气学院) < / p >
            href = re.findall('href="(.*?)"', resp)[1:]
            zhuanye = re.findall('<p>(.*?)<', resp)[:-3]
            # print(href, zhuanye)
            school_zhuanye = dict(zip(zhuanye, href))
            print(f'开始获取:{i}')
            self.get_zhuanye_xinxi(school_zhuanye, i)

    def re_max(self, resp, name):
        专业详情 = re.findall('class="promotipn-title">(.*?)<', resp, re.S)[0]
        招生信息 = re.findall('<div class="inner-body".*?<p>(.*?)</div>', resp, re.S)[0]
        # 招生信息 = re.findall('<p>(.*?)<', resp1, re.S)
        # _______________________专业招生详情
        研究方向 = re.findall('研究方向:</span.*?class="right-text">(.*?)</span>', resp, re.S)
        招生人数 = re.findall('招生人数:</span.*?ss="right-text">(.*?)</span>', resp, re.S)
        考试科目 = re.findall('>考试科目:</sp.*?ss="right-text">(.*?)</span>', resp, re.S)
        备注信息 = re.findall('>备注信息:</spa.*? class="right-text">(.*?)</span>', resp, re.S)
        try:
            with open(f'{name}.txt', 'a') as f:
                print(f'开始写入:{name}----{专业详情}')
                f.write(专业详情.strip())
                f.write('\n')
                f.write(招生信息.strip())
                f.write('\n')
                f.write('专业招生详情')
                f.write(研究方向[0].strip())
                f.write('\n')
                f.write(招生人数[0].strip())
                f.write('\n')
                f.write(考试科目[0].strip())
                f.write('\n')
                f.write(备注信息[0].strip())
                f.write('\n')
                f.write('*' * 100)
                f.write('\n')
        except UnicodeEncodeError:
            pass
        with open(f'{name}.txt', 'r') as r, open(f'_{name}.txt', 'a') as f:
            for i in r:
                rr = i.replace('</p>', '')
                rr = rr.replace('<p>', '')
                rr = rr.replace('<br/>', '')
                rr = rr.replace('<br>', '')
                f.write(rr)
        os.remove(f'{name}.txt')


    def get_zhuanye_xinxi(self, zhuanye, name):
        for i in zhuanye:
            url = 'https://school.kaoyan.cn' + zhuanye
            resp = requests.get(url).text
            self.re_max(resp, name)

    def run(self):
        shen = input('输入想获取的省份:')
        school_xx = self.get_name(self.get_url(shen))
        self.get_zhuanye(school_xx)


if __name__ == '__main__':
    ky = Kaoyan()
    ky.run()

爬完之后发现也没多大用处

就这样吧!
2.png
1.png
asas.png

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
chen711 + 1 + 1 我很赞同!
HKasdwd + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
春又来人已去 + 1 + 1 热心回复!
caofei520123 + 1 + 1 谢谢@Thanks!
alienswj + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chentest 发表于 2022-7-21 09:15
过来学习一下
SuperZDK 发表于 2022-7-20 23:39
alienswj 发表于 2022-7-20 22:46
beyond1994 发表于 2022-7-20 23:07
[Python] 纯文本查看 复制代码
import requests
import re
import os


class Kaoyan():
    def get_url(self, shen):
        url = 'https://school.kaoyan.cn/jd/school/lists'
        params = {
            'format': 'json',
            'page': 1,
            'province': shen,
            'class': '',
            'type': ''
        }
        resp = requests.get(url, params=params).text.encode().decode('unicode_escape')
        # print(resp.encode().decode('unicode_escape'))
        return resp

    def get_name(self, resp):
        list_name = re.findall('name":"(.*?)"', resp)
        school_id = re.findall('"school_id":"(.*?)"', resp)
        school_xx = dict(zip(list_name, school_id))
        return school_xx

    def get_zhuanye(self, school_xx):
        for i in school_xx:
            url = f'https://school.kaoyan.cn/jd/school/subject?school_id={school_xx}'
            # url = 'https://school.kaoyan.cn/jd/school/subject?school_id=1048'
            resp = requests.get(url).text
            # href = "/jd/school/specialdetail?id=281896" > < p > 机械(航空电子电气学院) < / p >
            href = re.findall('href="(.*?)"', resp)[1:]
            zhuanye = re.findall('<p>(.*?)<', resp)[:-3]
            # print(href, zhuanye)
            school_zhuanye = dict(zip(zhuanye, href))
            print(f'开始获取:{i}')
            self.get_zhuanye_xinxi(school_zhuanye, i)

    def re_max(self, resp, name):
        专业详情 = re.findall('class="promotipn-title">(.*?)<', resp, re.S)[0]
        招生信息 = re.findall('<div class="inner-body".*?<p>(.*?)</div>', resp, re.S)[0]
        # 招生信息 = re.findall('<p>(.*?)<', resp1, re.S)
        # _______________________专业招生详情
        研究方向 = re.findall('研究方向:</span.*?class="right-text">(.*?)</span>', resp, re.S)
        招生人数 = re.findall('招生人数:</span.*?ss="right-text">(.*?)</span>', resp, re.S)
        考试科目 = re.findall('>考试科目:</sp.*?ss="right-text">(.*?)</span>', resp, re.S)
        备注信息 = re.findall('>备注信息:</spa.*? class="right-text">(.*?)</span>', resp, re.S)
        try:
            with open(f'{name}.txt', 'a') as f:
                print(f'开始写入:{name}----{专业详情}')
                f.write(专业详情.strip())
                f.write('\n')
                f.write(招生信息.strip())
                f.write('\n')
                f.write('专业招生详情')
                f.write(研究方向[0].strip())
                f.write('\n')
                f.write(招生人数[0].strip())
                f.write('\n')
                f.write(考试科目[0].strip())
                f.write('\n')
                f.write(备注信息[0].strip())
                f.write('\n')
                f.write('*' * 100)
                f.write('\n')
        except UnicodeEncodeError:
            pass
        with open(f'{name}.txt', 'r') as r, open(f'_{name}.txt', 'a') as f:
            for i in r:
                rr = i.replace('</p>', '')
                rr = rr.replace('<p>', '')
                rr = rr.replace('<br/>', '')
                rr = rr.replace('<br>', '')
                f.write(rr)
        os.remove(f'{name}.txt')


    def get_zhuanye_xinxi(self, zhuanye, name):
        for i in zhuanye:
            url = 'https://school.kaoyan.cn' + zhuanye
            resp = requests.get(url).text
            self.re_max(resp, name)

    def run(self):
        shen = input('输入想获取的省份:')
        school_xx = self.get_name(self.get_url(shen))
        self.get_zhuanye(school_xx)


if __name__ == '__main__':
    ky = Kaoyan()
    ky.run()
realyou 发表于 2022-7-21 07:32
多谢分享
lkr537 发表于 2022-7-21 09:10
学习一下,谢谢分享啦
L__ 发表于 2022-7-22 16:37
谢谢分享
Alexu 发表于 2022-7-22 17:01
哈哈哈哈哈哈,绝了,属于是无聊没事练练爬虫了,可以考虑做个ip池,挂个DL,这样子多少防着点被请喝茶。
qzhh 发表于 2022-7-23 17:15
过来学习一下,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表