声明:用途仅供学习使用

实验一 爬取学堂在线:

一.实验题目

爬取学堂在线的计算机类课程页面内容
点击跳转学堂在线
要求将课程名称、老师、所属学校和选课人数信息,保存到一个csv文件中。

二.实验环境

Pycharm 3.7.0

三.实验分析
(一)思路分析

1.首先,打开学堂在线的网页,选择计算机课程,浏览器选择检查,发现如下显示:

开始以为按照静态页面进行爬取即可,
将spider.py程序如下实现:

import scrapyfrom xtest.items import MyItem  # 从items.py中引入MyItem对象class mySpider(scrapy.spiders.Spider):name = "xtest"  # 爬虫的名字是buptallowed_domains = ["www.xuetangx.com"]  # 允许爬取的网站域名start_urls = ["https://www.xuetangx.com/search?query=&org=&classify=1&type=&status=&page=1"]def parse(self, response):  # 解析爬取的内容item = MyItem()  # 生成一个在items.py中定义好的Myitem对象,用于接收爬取的数据for each in response.xpath("/html/body/div/div/div[3]/div[1]/div[1]/div[2]/div[1]"):item['name'] = each.xpath("div[2]/p[1]/span/text()").extract()  # 课程名称item['teacher'] = each.xpath("div[2]/p[2]/span[1]/span[1]/text()").extract()  # 老师昵称print(item['teacher'])item['school'] = each.xpath("div[2]/p[2]/span[2]/span/text()").extract()  # 开设的学校item['num'] = each.xpath("div[2]/p[2]/span[3]/text()").extract()  # 选课人数if item['name'] and item['teacher'] and item['school'] and item['num']:  # 去掉值为空的数据yield item  # 返回item数据给到pipelines模块

但是最后执行如下结果显示:

爬虫已经关闭,爬取不了任何数据。

2.最后猜想该查询结果页面的是动态页面,进行网页中,点开检查再次观察,发现以下结果:

现在明确确实是动态页面。
3.然后进一步发现是Ajax类型,以下为截图:

点击打开product_lists可以看见课程的相关信息,正是我们需要爬取的内容,如下所示:

4.基于以上的发现明确进行动态页面的爬取。

(二)实现动态页面爬取

1.找到爬取的链接以及请求的方式:

2.构造header,打开检查,找到Headers选项,查看请求头,如下所示:

3.将此代码赋值下来,填充headers的构造,代码如下所示:

4.除了请求头此外,还需要post的提交表格数据。

代码部分:

data='{"query":"","chief_org":[],"classify":["1"],"selling_type":[],"status":[],"appid":10000}'

5.在前面第一步已经分析,采取的是post的页面的请求方法,那么借助
FormRequest函数即可实现post请求。
重写start_request(self)函数,然后经过这个函数不断的循环发送请求,该函数代码实现如下:

6.接着就是解析内容的阶段
根据我们的需求,需要爬取课程名称,老师,所属学校以及课程人数,那么将items.py文件如下实现:

那么对于response返回的内容,使用json.loads处理获取到的json文件,json.loads()函数是将json格式数据转换为字典。

网页header部分显示如下:

由上图可知键分别为data与product_list,那么进行product_list内容如下方式进行提取:

7.为了爬取页面按照1-5的顺序,加上以下语句,延迟下载:

那么spider.py文件就如下所示:

8.然后pipelines进行将数据写入csv文件,那么pipelines.py文件如下所示:

9.最后当然需要将管道打开,那么settings.py文件如下所示:

(三)爬取结果(按照顺序的前五十条记录输出)

北邮 python 学堂在线动态请求页面内容爬取相关推荐

  1. 七、Python简单爬取学堂在线合作院校页面内容

    这是一个大学生的爬虫作业,我是收钱干活的,比较简单,来过来分享一下. 就是要爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中!例如:"{" ...

  2. Scrapy实例————爬取学堂在线合作院校页面内容

    目标 通过Scrapy爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中,例如:"清华大学,308",地址 http://www.xueta ...

  3. python动态网页爬取_Python 动态页面内容爬取

    实在没啥技术含量.用python3写的.现在已经不用python2了.直接终端下随手ipython调试 ╰─$ ipython3 Python 3.4.3 (default, Oct 14 2015, ...

  4. 动态渲染页面的爬取(项目案例:爬取今日头条热点新闻)

    声明:本文内容来自 张涛的<从零开始学Scrapy网络爬虫> 在使用Selenium的过程中,我们驱动的都是Chrome.FireFox等有界面的浏览器,效率极低.对爬虫来说,只要能高效地 ...

  5. python爬虫基础之AJAX页面的抓取

    一.基于AJAX请求页面的爬取 爬取网页:http://www.jy.whzbtb.com/V2PRTS 通过抓包,我们不难发现这是一个AJAX请求,我们需要携带必要的参数才能获取每一页的页面内容,具 ...

  6. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  7. 学堂在线 python_北邮python爬虫学堂在线

    [实例简介]爬取学堂在线动态页面 [实例内容]包括源文件.说明.可执行程序 采集的数据保存到xuetang.csv文件中了,如下图: [实例截图] [核心代码] xuetang ├── begin.p ...

  8. python动态页面元素爬取_python动态爬取网页

    简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我 ...

  9. Python—爬虫之Network,XHR,json 带参数请求数据(爬取歌单、歌词)

    Python-爬虫之Network,XHR,json & 带参数请求数据(爬取歌单.歌词) Network是什么,能做什么 XHR要如何请求 json格式的转换 带参数请求数据 修改请求头,便 ...

最新文章

  1. aide怎么打开html文件,求助!aide获取网页html源码
  2. python中格式化_Python中格式化的两种方法
  3. 《C++ Primer》14.2.2节练习
  4. 探讨LoadRunner的并发用户和集合点
  5. 美国计算机授课型硕士,美国高校一年制硕士项目中,哪些项目最值得推荐?
  6. canvas 五子棋游戏
  7. 选择多级分类_② 供应商管理(分类、评估、选择、绩效、集成、供应商过多的对策、多级供应商管理)...
  8. 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获
  9. SQL查询数据以及排序
  10. 25个最佳SSH命令
  11. 最新发布:数据库防火墙技术市场调研报告
  12. 全国计算机考试满分是多少,中考计算机多少分满分?中考计算机考试分数是多少...
  13. Android CoordinatorLayout Behavior
  14. 5V转3V的降压芯片和LDO
  15. Python3.x整体知识介绍—撩妹大法
  16. 请领取你的免费云电脑:微软Windows实验虚拟机,每天可以免费使用两个小时,上Google搜资料很方便
  17. 思科配置VLAN间单臂路由
  18. win7笔记本外接显示器html,笔记本接显示屏如何设置_笔记本外接显示屏的图文教程-win7之家...
  19. 强网杯2018逆向 hide lebel:linux脱壳 / create function / mmap / XTEA变形 / 大小端
  20. 怎么创建html元素节点,怎么用DOM创建a节点

热门文章

  1. python秒懂百科视频_百度百科上线“秒懂”视频功能 用短视频呈现词条内容
  2. 【永恒之塔私服今天开放了】
  3. anaconda版本查看,老版本下载。
  4. 游戏是怎样炼成的? 本田太郎
  5. android 7.0 动态壁纸,LOL动态壁纸手机版app下载
  6. 分布式消息队列RocketMQ工作原理与应用(一)
  7. 出租车智能终端与外设通讯实践
  8. “图解服务器端网络架构”小结
  9. 结构思考力--李忠秋
  10. 【绿盟】检测到目标Referrer-Policy响应头缺失