scrapy爬取中国高考志愿填报网站各大学信息

news/2024/5/8 13:13:00/文章来源:https://blog.csdn.net/weixin_45920625/article/details/116267760

中国高考志愿填报网站爬虫

      • 一、环境准备
      • 二、问题分析
      • 三、spider
      • 三、item
      • 四、setting
      • 五、pipelines

一、环境准备

python3.8.3
pycharm
项目所需第三方包

pip install scrapy fake-useragent requests  virtualenv -i https://pypi.douban.com/simple

1.1创建虚拟环境
切换到指定目录创建

virtualenv .venv

创建完记得激活虚拟环境

1.2创建项目

scrapy startproject 项目名称

1.3使用pycharm打开项目,将创建的虚拟环境配置到项目中来
1.4创建京东spider

scrapy genspider 爬虫名称 url

1.4 修改允许访问的域名,删除https:

二、问题分析

查看网页响应的数据
在这里插入图片描述

发现返回的数据在json中
查看请求的网址
在这里插入图片描述
打开网址查看数据
在这里插入图片描述
拿到详情页请求地址,获取详情页数据,分别获取学校名称、学校邮箱、学校电话、学校电话、学校地址、学校邮编、学校网址

学校名称

学校邮箱

学校电话

学校地址

学校邮编

学校网址

三、spider

import json
import scrapyfrom lianjia.items import china_school_Itemclass ChinaSchoolSpider(scrapy.Spider):name = 'china_school'allowed_domains = ['api.eol.cn', 'static-data.eol.cn']start_urls = ['https://api.eol.cn/gkcx/api/?access_token=&admissions=&central=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page=1&province_id=&ranktype=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&top_school_id=&type=&uri=apidata/api/gk/school/lists']def parse(self, response):jsons = json.loads(response.text)ls = jsons.get('data')for l in ls.get('item'):school_id = l.get('school_id')school_url = 'https://gkcx.eol.cn/school/' + str(school_id)new_school_url = f'https://static-data.eol.cn/www/2.0/school/{school_id}/info.json'yield scrapy.Request(url=new_school_url, callback=self.detail_parse)for i in range(2, 143):nex_page_url = f'https://api.eol.cn/gkcx/api/?access_token=&admissions=&central=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page={i}&province_id=&ranktype=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&top_school_id=&type=&uri=apidata/api/gk/school/lists'yield scrapy.Request(url=nex_page_url, callback=self.parse)def detail_parse(self, response):item = china_school_Item()jsons = json.loads(response.text)data = jsons.get('data')school_name = data.get('name')school_email_one = data.get('email')school_email_two = data.get('school_email')school_address = data.get('address')school_postcode = data.get('postcode')school_site_one = data.get('site')school_site_two = data.get('school_site')school_phone_one = data.get('phone')school_phone_two = data.get('school_phone')item['school_name'] = school_nameitem['school_email_one'] = school_email_oneitem['school_email_two'] = school_email_twoitem['school_address'] = school_addressitem['school_postcode'] = school_postcodeitem['school_site_one'] = school_site_oneitem['school_site_two'] = school_site_twoitem['school_phone_one'] = school_phone_oneitem['school_phone_two'] = school_phone_twoyield item

三、item

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass china_school_Item(scrapy.Item):# define the fields for your item here like:school_name = scrapy.Field()school_email_one = scrapy.Field()school_email_two = scrapy.Field()school_address = scrapy.Field()school_postcode = scrapy.Field()school_site_one = scrapy.Field()school_site_two = scrapy.Field()school_phone_one = scrapy.Field()school_phone_two = scrapy.Field()

四、setting

import randomfrom fake_useragent import UserAgent
ua = UserAgent()
USER_AGENT = ua.random
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = random.uniform(0.5, 1)
ITEM_PIPELINES = {'lianjia.pipelines.China_school_Pipeline': 300,
}

五、pipelines

class China_school_Pipeline:# def process_item(self, item, spider):#     return itemdef open_spider(self, spider):self.fp = open('./china_schook.xlsx', mode='w+', encoding='utf-8')self.fp.write('school_name\tschool_email_one\tschool_email_two\tschool_address\tschool_postcode\tschool_site_one\tschool_site_two\tschool_phone_one\tschool_phone_two\t\n')def process_item(self, item, spider):# 写入文件try:line = '\t'.join(list(item.values())) + '\n'self.fp.write(line)return itemexcept:passdef close_spider(self, spider):# 关闭文件self.fp.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_851033.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫笔记8:如何处理不信任的SSL证书的网站、cookie的作用、

一、如何处理不信任的SSL证书的网站 比如国家税务总局发票查验平台(https://inv-veri.chinatax.gov.cn/) 爬取时就会报错: 处理方法:get()中的参数verify设置为False(默认是True) 二、cookie的作用 cook…

爬虫笔记25:piplines文件的使用、简单案例:scrapy爬取古诗文网站(scrapy中的常用翻页方法)、

一、piplines文件的使用 1、 开启管道 在settings.py文件中取消以下注释: ITEM_PIPELINES { ‘mySpider.pipelines.MyspiderPipeline’: 300, } ​ 2 、回到爬虫文件当中,把数据yield 给管道。 为什么是yield的原因: 不会浪费内存翻页的逻…

爬虫笔记25补充:scrapy爬取古诗文网站(爬取原文和译文时,遇到‘展开阅读全文’的处理)

如图: kenne 我们点击查看网页原代码,发现隐藏的数据并不在原代码中, 我们点击检查-network-再点击展开阅读全文 在又加载出来的数据中,找到下图椭圆框中的Response,发现这里有完整的译文及注释。由此我打开其Headers中的url&am…

微信开放平台---网站应用开发---微信登录功能 简介

1 微信开放平台:https://open.weixin.qq.com/ 2 开通流程: 3 微信官方教程:https://open.weixin.qq.com/cgi-bin/showdocument?actiondir_list&tresource/res_list&verify1&idopen1419316505&token&langzh_CN 4 效果展示…

抓取某一个网站整站的记录 【记录】

经常由于某些原因我们需要爬取某一个网站或者直接复制某一个站点,到网上找了很多工具进行测试,试了很多各有各的问题,最终选择了Teleport Ultra,用起来效果很好;具体的操作手册等东西就不在这里说了,网上搜…

谈谈个人网站的建立(三)—— 定时任务

欢迎访问我的网站http://www.wenzhihuai.com/ 。谢谢啊,如果可以,希望能在GitHub上给个star,GitHub地址https://github.com/Zephery/newblog 。 Quartz 先看一下Quartz的架构图:一.特点: 强大的调度功能,例…

同步、异步方式对SEO搜索引擎优化的影响

本人昨天去面试了,面试官问了这样一个问题“你知道SEO不?同步、异步对SEO有什么影响?”,我当时就懵了,这几个名词SEO、同步、异步我都知道,但是。SEO和同步异步有什么关系呢?面试官人很nice&…

记录使用scrapy爬取新闻网站最新新闻存入MySQL数据库,每天定时爬取自动更新

爬取每天更新的新闻,使用scrapy框架,Python2.7,存入MySQL数据库,将每次的爬虫日志和爬取过程中的bug信息存为log文件下。定义bat批处理文件,添加到计划任务程序中,自动爬取。 额… 1.在items文件中&#x…

6个线上视频音频转换网站

1.Zamzar Zamzar是一项免费的线上转换格式网站,把歌曲、图档、影像和文件转变成不同的格式。其服务特点是高品质的文件格式转换。基本的免费服务,可以让您转换的文件大小为100MB 。如果想拥有更多功能的服务,你可以注册成为基础会员&#xff…

四年大学下那些让我欲罢不能的网站

在本科学习期间,通过Google/百度搜索接触了各种各样的学习网站,收益匪浅,现在来分享一下吧 分为三种类型,“课程网站”,“编程网站”,“社区网站”,贵精不贵多,每种分享几个 课程网站…

Github Pages + jekyll 全面介绍极简搭建个人网站和博客

本文将会全面介绍一下如何使用Github Pages jekyll搭建个人站点,所谓极简的意思就是不用使用git和本地构建jekll服务,直接在Github网站上编辑设置即可,但会涉及到jekll的一些配置和编程控制。可以参看我的网站模板:https://scott…

css可以对网页干什么,css对网页的优势-专业SEO技术教程(33)

css对网页的优势-专业SEO技术教程(33)采用css布局相对于传统的table网页布局的显著优势1.表现和内容相分离将设计部分剥离出来的放在一个独立样式文件中,HTML文件中只存放文本信息。这样的页面对搜索引擎更加友好。2.提高页面浏览速度对于同一个页面视觉效果&#x…

【转载】IIS网站如何同时解析带www和不带www的域名

针对公网上线的网站系统,很多网站的域名会同时含有带www和不带www的域名解析记录,如果需要同时解析带www和不带www的域名信息,则需要在相应的域名解析平台(如阿里云域名解析平台、腾讯云域名解析平台)设置不带www的主域名以及带www的域名解析…

搜索引擎优化:常用的SEO六个指标

在做网站推广过程中,搜索引擎优化是一个重要点,绝大部分行业来自自然搜索的流量都是非常大的,正因为如此,一般企业隔一段时间就对网站自然搜索的情况作一个KPI考核,而这些重点指标不外乎:网页的收录数量、网…

阿里云上发布自己的网站的方法

在阿里云上发布自己的网站的方法: 一、在阿里云上发布自己的网站的方法: 进入我的电脑,在头部输入ftp://60.205.48.122(IP地址为自己注册的阿里云账号上的IP地址) 进入以后登录自己的账号 用户名&#x…

java使用HttpURLConnection检索网站时403错误处理方式

java使用HttpURLConnection检索网站时403错误处理方式: 我们通过代码方式访问网站时会报错: 此种情况分2中类型, 1.需要登录才可以访问; 2.需要设置User-Agent来欺骗服务器。 connection.setRequestProperty("User-Agent", &qu…

解决某些网站,图片不能下载

如下图,右键图片,没有保存图片的选项 按下F12 拷贝src中的地址,输入到浏览器,这时候就可以保存图片了

给duckling网站加上cnzz网站统计信息

第一,注册cnzz帐号,网址http://www.cnzz.com/ 第二,登录帐号,获取代码; 第三,根据自己的需要,将代码加入网站的公共页面,比如说head、foot、version页面都可以。 第四&#xff0c…

网站压力测试工具Jmeter安装与使用

系统是Windows XP 配置此工具前,需要先在机器上安装jdk 如下是在jdk1.7的基础上配置的; 安装步骤如下: 第一步:解压apache-jmeter-2.8.zip文件至c盘,本文解压至C:\jmeter2.8目录下。 第二步:桌面上选择“我…

十大抢手的网站压力测试工具

原文链接:http://blog.163.com/weiwenjuan_bj/blog/static/1403503362010621111052355/ 两天,jnj在本站发布了《如何在低速率网络中测试 Web 应用》,那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具&#x…