爬一爬全国有多少所普通高等学校

爬一爬全国有多少所普通高等学校

本篇属于技术应用文章,因此省略一些知识点,有疑问的可以在评论区留言。

  • 寻找目标
    找到目标网站:https://gkcx.eol.cn/
  • 分析页面,找到学校请求连接
    这里使用Fiddler工具查看网站的请求链接,过程自不必说直接定位到 https://api.eol.cn/gkcx/api/?access_token=&admissions=¢ral=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page=2&province_id=11&ranktype=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&type=&uri=apidata/api/gk/school/lists这个链接
    爬一爬全国有多少所普通高等学校
  • 使用scrapy爬虫框架进行请求获取数据
    1.创建爬虫项目工程,在工程下使用命令创建名为 scrapy genspider gkcx gkcx.eol.cn的爬虫文件。
    2.增加 start_requests方法,在这里进行cookie的设置,请求url的构建。cookie可以在浏览器中进行查找copy即可。url的构建完毕后,通过循环进行请求。这个请求有点慢耐心等待。
    爬一爬全国有多少所普通高等学校
import json
import scrapy
import os
class GkcxSpider(scrapy.Spider):
    name = 'gkcx'
    allowed_domains = ['gkcx.eol.cn','eol.cn']
    def start_requests(self):
        cookies={
                "UM_distinctid":"17880acb4efff-01cd940f9dbbf6-5c3f1e49-1fa400-17880acb4f08ed",
                "gr_user_id":"19fc3b7b-a1fe-4f68-8484-1d5abbbe4ff2",
                "CNZZDATA1254843834":"491458528-1617069302-%7C1617087618",
                "areaid":"15",
                "cityid":"1502",
                "Hm_lvt_9b4517aa97b6b67e7c396bef15886cef":"1617066505,1617259881",
                "Hm_lpvt_9b4517aa97b6b67e7c396bef15886cef":"1617323594",
                "88025341dda01c5f_gr_session_id":"bfe0e3c2-efab-4bb8-b6ca-ec9178caecde",
                "88025341dda01c5f_gr_session_id_bfe0e3c2-efab-4bb8-b6ca-ec9178caecde":"true",
                "CNZZDATA4696252":"cnzz_eid%3D1247075774-1617065693-%26ntime%3D1617319297"
            }
        start_urls = ['https://api.eol.cn/gkcx/api/?access_token=&admissions=¢ral=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page={}&province_id=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&type=&uri=apidata/api/gk/school/lists'.format(num) for num in range(2)]
        self.cookies=cookies
        for url in start_urls:
            yield scrapy.Request(url=url, cookies=cookies, callback=self.parse)
    def parse(self, response):
        jsonSchool = json.loads(response.text)
        for item in jsonSchool['data']['item']:
            yield item
  • 保存需要的数据
    保存数据的位置我们写在 Pipeline.py这个文件中,存储方式我们以文件形式保存数据。在 open_spider方法中我们定义我们的文件变量,在 process_item这个接受item的数据方法中我们进行保存数据的处理。最后我们在 close_spider中关闭文件流。

import json

import pymongo
from itemadapter import ItemAdapter

class GkzsscrapyPipeline:
    def open_spider(self,spider):
        self.filename=open('schooldata.txt','a',encoding='utf-8')
        mogoclient = pymongo.MongoClient()
        self.db = mogoclient.gkcx

    def process_item(self, item, spider):

        self.filename.write(json.dumps(dict(item),ensure_ascii=False)+'\n')

        return item
    def close_spider(self,spider):
        self.filename.close()
  • 爬取结果
    爬一爬全国有多少所普通高等学校

这里我就构造了两页的数据所以想知道结果的,自己可以爬一下。最后附上官方的数据。
2020年官方全国普通高等学校数据参考
不清楚的欢迎留言!!!

Original: https://blog.csdn.net/yxl219/article/details/115691664
Author: yxlalm
Title: 爬一爬全国有多少所普通高等学校

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/791765/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球