北邮 python 学堂在线动态请求页面内容爬取
声明:用途仅供学习使用
实验一 爬取学堂在线:
一.实验题目
爬取学堂在线的计算机类课程页面内容
点击跳转学堂在线
要求将课程名称、老师、所属学校和选课人数信息,保存到一个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 学堂在线动态请求页面内容爬取相关推荐
- 七、Python简单爬取学堂在线合作院校页面内容
这是一个大学生的爬虫作业,我是收钱干活的,比较简单,来过来分享一下. 就是要爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中!例如:"{" ...
- Scrapy实例————爬取学堂在线合作院校页面内容
目标 通过Scrapy爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中,例如:"清华大学,308",地址 http://www.xueta ...
- python动态网页爬取_Python 动态页面内容爬取
实在没啥技术含量.用python3写的.现在已经不用python2了.直接终端下随手ipython调试 ╰─$ ipython3 Python 3.4.3 (default, Oct 14 2015, ...
- 动态渲染页面的爬取(项目案例:爬取今日头条热点新闻)
声明:本文内容来自 张涛的<从零开始学Scrapy网络爬虫> 在使用Selenium的过程中,我们驱动的都是Chrome.FireFox等有界面的浏览器,效率极低.对爬虫来说,只要能高效地 ...
- python爬虫基础之AJAX页面的抓取
一.基于AJAX请求页面的爬取 爬取网页:http://www.jy.whzbtb.com/V2PRTS 通过抓包,我们不难发现这是一个AJAX请求,我们需要携带必要的参数才能获取每一页的页面内容,具 ...
- Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐
一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...
- 学堂在线 python_北邮python爬虫学堂在线
[实例简介]爬取学堂在线动态页面 [实例内容]包括源文件.说明.可执行程序 采集的数据保存到xuetang.csv文件中了,如下图: [实例截图] [核心代码] xuetang ├── begin.p ...
- python动态页面元素爬取_python动态爬取网页
简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我 ...
- Python—爬虫之Network,XHR,json 带参数请求数据(爬取歌单、歌词)
Python-爬虫之Network,XHR,json & 带参数请求数据(爬取歌单.歌词) Network是什么,能做什么 XHR要如何请求 json格式的转换 带参数请求数据 修改请求头,便 ...
最新文章
- aide怎么打开html文件,求助!aide获取网页html源码
- python中格式化_Python中格式化的两种方法
- 《C++ Primer》14.2.2节练习
- 探讨LoadRunner的并发用户和集合点
- 美国计算机授课型硕士,美国高校一年制硕士项目中,哪些项目最值得推荐?
- canvas 五子棋游戏
- 选择多级分类_② 供应商管理(分类、评估、选择、绩效、集成、供应商过多的对策、多级供应商管理)...
- 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获
- SQL查询数据以及排序
- 25个最佳SSH命令
- 最新发布:数据库防火墙技术市场调研报告
- 全国计算机考试满分是多少,中考计算机多少分满分?中考计算机考试分数是多少...
- Android CoordinatorLayout Behavior
- 5V转3V的降压芯片和LDO
- Python3.x整体知识介绍—撩妹大法
- 请领取你的免费云电脑:微软Windows实验虚拟机,每天可以免费使用两个小时,上Google搜资料很方便
- 思科配置VLAN间单臂路由
- win7笔记本外接显示器html,笔记本接显示屏如何设置_笔记本外接显示屏的图文教程-win7之家...
- 强网杯2018逆向 hide lebel:linux脱壳 / create function / mmap / XTEA变形 / 大小端
- 怎么创建html元素节点,怎么用DOM创建a节点