python爬取换页_一个可识别翻页的简易Python爬虫程序
同学拿出一个需求:从某课程教学网站上爬取所有课程的主页面,以及课程简介栏目内容。
于是在之前做的那个练手级的Python爬虫程序中进行修改,最终实现了该功能。与之前那个爬虫不同,这里每一个大类的课程下面都有上千个具体课程名,分为几百页,所以需要识别翻页的问题。
另外,由于网站结构不同,这里的程序整体实现思路也稍有不同,大致如下:
1、从该网站首页获取所有课程大类的链接放到list中
2、遍历上述list,对于每一个链接,对应的都是具体课程名的列表,24个为一页。
2.1 获取该页面中包含的具体课程地址链接,并读取出具体内容,将相关信息保存到本地txt文件中;
2.2 是否有‘下一页’链接。如果有,将此‘下一页’的链接设置为当前页,交给循环进行迭代;如果没有,说明该大类已经读取完毕,继续外层循环
具体代码:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import time
#所需变量初始化及准备工作
#记录程序开始时间
start = time.clock()
#设置网站首页地址
rooturl='http://www.jingpinke.com/'
#创建一个list用于保存课程大类的链接地址
indexlist=[]
##====================以下为方法========================##
'''
方法名:getContent
作用:从pagelist中的url中解析出相关内容,并保存到本地文本中
参数:含有具体课程内容的网址
'''
def getContent(url):
try:
currentPage=urlopen(url).read() #读取源码
except Exception as err:
print('联网超时,退出当前页面。')
currentText=BeautifulSoup(currentPage) #利用bs进行解析
#获取课程标题、时间、教师等信息,并将它们以空格连接起来作为文件名使用
title=currentText.find('div',{'class':'cTitle'}).find('h2').get_text()
teacher=currentText.find('div',{'class':'course_final_ohter'}).findAll('span')[0].get_text()
university=currentText.find('div',{'class':'course_final_ohter'}).findAll('span')[1].get_text()
date=currentText.find('div',{'class':'course_final_ohter'}).findAll('span')[2].get_text()
rank=currentText.find('div',{'class':'course_final_ohter'}).findAll('span')[3].get_text()
classtitle=date+' '+university+' '+rank+' '+title+' '+teacher
#获取课程简介内容
briefintro=currentText.find('pre').get_text()
#以标题为文件名,创建txt文件,并写入正文内容
f=open('file/'+classtitle+'.txt','w+', encoding='utf-8')
f.write(classtitle+'\r\n'+briefintro)
print(classtitle+'.txt')
f.close()
#开始爬取
# 1、先解析根目录,获取13个目标链接
print('解析根目录')
rawtext=urlopen(rooturl).read()
soup = BeautifulSoup(rawtext)
targetDiv=soup.find('div',{'class':'benke_fenlei'})
catalogLinks=targetDiv.findAll('a')
for l in catalogLinks:
indexlist.append(l.get('href'))
print('根目录解析完成')
#2、从indexlist中逐个读取地址,获取该课程大类下的每个课程的地址
for index in indexlist:
currentpage=index #初始时,将某大类的链接设为当前页
count=1 # 计数器,计算某大类下的课程数目
while True:
print("当前页:"+currentpage)
try:
rawtext=urlopen(currentpage).read() #读取当前页
except Exception as err:
print('联网超时,退出当前大类。')
break
soup= BeautifulSoup(rawtext) #解析当前页
eachclass=soup.find('div',{'class':'course_list'}).findAll('table') #获取课程名列表,每一个课程名都放在一个table中
for c in eachclass: #循环获取每一个课程的链接地址
print(str(count)+':http://course.jingpinke.com'+c.find('a').get('href')) #打印该地址
count=count+1 # 计数器自增
getContent('http://course.jingpinke.com'+c.find('a').get('href')) #调用getContent方法,获取该页内容,并保存
if soup.find(id='nextPage')==None: # 如果当前页未发现下一页链接 说明该大类已经获取完毕
print('没有了。') # 打印结束
break #退出外层循环,继续下一大类
else: #否则,说明还有下一页
nextpageurl='http://course.jingpinke.com/search'+soup.find(id='nextPage').find('a').get('href') # 获取当前页中的下一页链接
currentpage=nextpageurl #将当前页中的下一页链接设为当前页
print('下一页:'+nextpageurl) # 打印下一步要处理的地址
#4、计算程序执行过程耗时
end = time.clock()
print (end-start)
说明:
由于我是在sublime text2环境下写的程序,之前将该软件默认的字符编码设为gbk,这导致写入的文件名中含有非中文字符(比如阿拉伯文)时,出现gbk不能编译的错误,后来在csdn论坛上看到,如果 在操作系统的环境变量中加入PYTHONIOENCODING项,项值为utf-8,其含义是将Python的默认IO编码设置为utf-8,然后将sublime text2中的pyton.sublim-build中人为添加的endoding:gbk删掉,重启sublime text2后,即可解决上述问题。
python爬取换页_一个可识别翻页的简易Python爬虫程序相关推荐
- 怎么用python爬取老师_小年轻不讲武德,竟用Python爬取B站上1.4w条马保国老师视频数据进行分析...
看到标题,啪的一下你就进来了吧!如果有经常刷B站的小伙伴,肯定都知道B站鬼畜现在的顶流是谁? 印度:没错正是在下 那必须是当代大师浑元形意太极拳掌门人「马保国」先生啊! 实话讲,马保国走进大家视野还是 ...
- python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载
每天一点点,记录学习 python 爬取菜鸟教程python100题 近期爬虫项目,看完请点赞哦: 1:python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载 2:pytho ...
- python爬取物流信息_手把手教你用Python爬取快递100查询你的物流信息
前言 我们经常会去查快递的物流单号,可是这些物流单号是从哪里来的呢? 快递鸟集合了多家快递公司查询接口,输入相应快递公司编码和快递单号就可以获取到对应的物流信息很方便快捷. 项目目标 教会大家如何用P ...
- python爬取股票信息_利用Python爬取网易上证所有股票数据(代码
利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...
- 如何用python爬取数据_如何使用python爬取知乎数据并做简单分析
原标题:如何使用python爬取知乎数据并做简单分析 一.使用的技术栈: 爬虫:python27 +requests+json+bs4+time 分析工具: ELK套件 开发工具:pycharm 数据 ...
- 如何用python爬取视频_介绍Python爬取哔哩哔哩视频
python视频教程栏目介绍如何爬取视频 本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流.好了 ...
- 用python爬取网络图片_简单实现Python爬取网络图片
本文实例为大家分享了Python爬取网络图片的具体代码,供大家参考,具体内容如下 代码: import urllib import urllib.request import re #打开网页,下载器 ...
- python爬取晋江_爬虫爬取晋江文学网总分榜(失败)
一.目的 : 爬取晋江文学网总分榜 二.python爬取数据 三.爬取 在开始多出现了38号而且顺序内容不准确 代码: import requests from bs4 import Beautifu ...
- python爬取前程无忧_用python爬取前程无忧网,看看我们是否真的“前程无忧”?...
The best time to plant a tree was 10 years ago,the second best time is now. 种一棵树最好的时间是十年前,其次是现在. 利用p ...
最新文章
- SSL与HTTPS,HTTP有什么联系
- 计算机组成原理第7章-输入/输出系统
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
- windows云服务器价格_服务器windows2008价格
- oracle表分析 示例
- 百度献礼高校开学季:AI Studio教育版上线!
- html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
- 转折后的总结--2014年找工作
- Google Cloud Platform中没有Active Directory域的可用性组
- MYSQL - 存储过程学习笔记
- 安装pattern出错mysql_config not found
- React router 路由 入门安装
- Atitit 管理原理与实践attilax总结
- PyTorch手写字体识别
- winhex数据恢复入门教程
- 成都最最最牛逼的 IT 公司全在这了
- linux文件夹的执行权限不够怎么解决
- 运维派 企业面试题1 监控MySQL主从同步是否异常
- 在本地写一个以市净率为因子的回测结果
- iOS 开发笔记-获取某个APP素材
热门文章
- 二十万字C/C++、嵌入式软开面试题全集宝典三
- copyof java_死磕 java集合之CopyOnWriteArrayList源码分析
- 解救小易——网易笔试
- (Q 2)netstat命令 检测TCP/IP 网络链接是否存在异常
- Siamese Network (应用篇4) :块匹配中一致性特征和距离测度学习 CVPR2015
- 仔细想了想支持向量机(Support Vector Mechine)
- C++纯虚函数和抽象类
- u-boot编译过程分析
- Typora + PicGo + Gitee
- 一文看懂Python(八)-----内置高阶函数用法总结