但是,按照常规的爬取方法是不可行的,因为数据是分页的:

最关键的是,不管是第几页,浏览器地址栏都是不变的,所以每次爬虫只能爬取第一页数据。为了获取新数据的信息,点击F12,查看页面源代码,可以发现数据是使用JS动态加载的,而且没有地址,只有一个skipToPage(..)函数。

所以,解决方案是:

获得请求信息,包括header和 form data(表单信息)

模拟请求,获得数据

分析数据,获得结果

以下为实施步骤:

1.获取请求信息,如下图所示,控制台选择Network->XHR,此时,点击页面跳转按钮,控制台会出现发出的请求,然后选择发出请求的文件(第三步),然后选择Headers,下方显示的就是请求头文件信息。

2,使用Python 模拟请求,在Headers下找到 Request Headers 部分,这是请求的头数据。

然后找到Form Data

复制以上内容,形成如下代码

headers ={'Accept': 'text/html, */*; q=0.01','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,ko;q=0.7','Connection': 'keep-alive','Content-Length': '61','Cookie': 'route=bd118df546101f9fcee5c1a58356a008; JSESSIONID=047BD79E9754BAED525EFE860760393E','Host': 'www.chinaooc.cn','Origin': 'http://www.chinaooc.cn','Pragma': 'no-cache','Referer': 'http://www.chinaooc.cn/front/show_index.htm','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36','X-Requested-With': 'XMLHttpRequest','Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}

form_data={'pager.pageNumber':'2','pager.pageSize': '50','pager.keyword': '','mode': 'page'}

模拟发送请求,每次改变form_data中的页码就能获得不同的数据,代码如下:

form_data['pager.pageNumber']=times

url= 'http://www.chinaooc.cn/front/show_index.htm'response= requests.post(url, data=form_data, headers=headers)

3,分析response中返回的信息即可获得数据。

完整代码如下:

#!/usr/bin/env python

#-*- coding: utf-8 -*-

importrequestsimportrefrom bs4 importBeautifulSoupclassitem:def __init__(self):

self.num=0

self.school=''self.clazz=''self.url=''headers={'Accept': 'text/html, */*; q=0.01','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,ko;q=0.7','Connection': 'keep-alive','Content-Length': '61','Cookie': 'route=bd118df546101f9fcee5c1a58356a008; JSESSIONID=047BD79E9754BAED525EFE860760393E','Host': 'www.chinaooc.cn','Origin': 'http://www.chinaooc.cn','Pragma': 'no-cache','Referer': 'http://www.chinaooc.cn/front/show_index.htm','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36','X-Requested-With': 'XMLHttpRequest','Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}

form_data={'pager.pageNumber':'2','pager.pageSize': '50','pager.keyword': '','mode': 'page'}

times=20

while times < 34:

form_data['pager.pageNumber']=times

url= 'http://www.chinaooc.cn/front/show_index.htm'response= requests.post(url, data=form_data, headers=headers)

soup= BeautifulSoup(response.content, "html.parser")

tr_list= soup.find_all('tr')

my_tr_list= tr_list[1:-1]for tr inmy_tr_list:

td_list= tr.find_all('td')

a=item()

a.num=td_list[0].contents[0]

a.school= td_list[1].contents[0]

a.clazz= td_list[2].contents[0].replace('\"',' ')

a.url= td_list[5].find_all('a')[0]["href"]#name =

with open('E:/data/'+'['+a.num+']['+a.school+']['+a.clazz+'].html','wb') as f:

res=requests.get(a.url)

res.encoding=res.apparent_encoding

f.write(res.content)

times= times+1

python爬虫爬取多个页面_Python 爬虫爬取多页数据相关推荐

  1. python爬虫爬取多个页面_Python爬虫笔记:爬取单个页面

    前言 学习Python爬虫技术也是一件需要大量实践的事情,因为并不是所有的网站都对爬虫友好,更多的一种情况是网站为了限制爬虫不得不在最小化影响用户体验的前提下对网站访问做出一定的限制,最常见的就是一些 ...

  2. python 依据某几列累加求和_Python爬虫笔记:爬取单个页面

    前言 学习Python爬虫技术也是一件需要大量实践的事情,因为并不是所有的网站都对爬虫友好,更多的一种情况是网站为了限制爬虫不得不在最小化影响用户体验的前提下对网站访问做出一定的限制,最常见的就是一些 ...

  3. python多线程爬虫 爬取多个网页_Python 多线程抓取网页

    最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2. ...

  4. python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  5. python爬取京东手机参数_python爬虫——分页爬取京东商城商品信息(手机为例)...

    1.最近刚开始学习python   写了个爬虫练习,感觉主要是得会用F12查询网站结构代码.还涉及到反爬虫,每个网站都不一样,拿到的解析出的json数据格式也不同.得有些Web知识的基础才行. htt ...

  6. python爬虫requests源码链家_Python 爬虫 链家二手房(自行输入城市爬取)

    因同事想在沈阳买房,对比分析沈阳各区的房价,让我帮忙爬取一下链家网相关数据,然后打 算记下笔记 用于总结学到的东西&用到的东西. 一.爬虫需要会什么? 学习东西 首先你要知道它是干嘛的.爬虫 ...

  7. python爬取新闻后提炼_Python爬虫开发的3大难题,别上了贼船才发现,水有多深...

    写爬虫,是一个非常考验综合实力的活儿.有时候,你轻而易举地就抓取到了想要的数据:有时候,你费尽心思却毫无所获. 好多Python爬虫的入门教程都是一行代码就把你骗上了"贼船",等上 ...

  8. python爬取知乎标题_python爬虫 爬取知乎文章标题及评论

    目的:学习笔记 2.首先我们试着爬取下来一篇文章的评论,通过搜索发现在 response里面我们并没有匹配到评论,说明评论是动态加载的. 3.此时我们清空请求,收起评论,再次打开评论 4.完成上面操作 ...

  9. python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...

最新文章

  1. Select2 的简单使用
  2. Fire uva 11624
  3. JS 事件冒泡和事件捕获
  4. 弹出硬盘时应用程序阻碍停用设备_7GB硬盘空间被Win 10“偷走”?微软系统的这些“潜规则”你掌握了吗?...
  5. axure html尺寸,axure怎么确定尺寸
  6. H264中的SPS、PPS提取与作用
  7. java jpa_Java JPA 语法知识
  8. PHP+MySql+PDO实现简单增加、删除、修改、查询
  9. 篮球30秒可控计时器
  10. APP开发用什么框架最好?这5大框架,开发者必备神器
  11. 【原创】Magisk Root隐藏模块 Shamiko安装
  12. 什么是Apache?Apache是什么意思?
  13. 揭露!华为HR实名控诉:不要相信HR,他们不诚信!
  14. slice、splic、splite相互间的区别
  15. DS二叉树——Huffman编码与解码(不含代码框架)
  16. 高通,MTK,紫光展锐 CPU超大核,大核,小核分布查询 以及绑定
  17. vscode中使用md文件
  18. 【Caffe】简单介绍
  19. 行业分析-全球与中国引风机市场现状及未来发展趋势
  20. 技术管理成长计划(一):角色认知及转身

热门文章

  1. Nginx的编译安装步骤详解
  2. Magnitude-based weight pruning with Keras(keras模型权重裁剪)
  3. 江西省主打计算机的专科学校,江西好的电脑专科学校有哪个些
  4. ML:基于葡萄牙银行机构营销活动数据集(年龄/职业等)利用Pipeline框架(两种类型特征并行处理)+多种模型预测(分层抽样+调参交叉验证评估+网格/随机搜索+推理)客户是否购买该银行的产品二分类案
  5. R语言学习笔记2——基础绘图
  6. Python初学者自励——程序设计基本方法
  7. 黑洞数—python
  8. Unsupervised Learning for Real-World Super-Resolution
  9. mysql unix时间加索引_【mysql】mysql时间字段怎么加索引
  10. Go语言的type func()用法 | type func() 自定义函数类型