爬虫--实战--极课学院课程爬取

#实战环节
#目标网站 http://www/jikexueyuan.com/course/
#目标内容:课程名称,课程介绍,课程时间,课程等级,学习人数
#涉及到的技术有 Request抓取网页  re.sub换页 正则表达式匹配内容
#当抓取的内容很多时候要获得内容的时候可以利用标签的class属性
#利用先抓大再抓小的技巧
import requests
import re
#将命令提示符的编码强制转换为utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class spider(object):
	def __init__(self):
		print "开始爬取内容"
	#根据单个连接得到抓取的网页内容
	def getsource(self,url):
		html = requests.get(url)
		return html.text
	#根据页面总的数量获取所有的链接
	def changepage(self,url,total_page):
		now_page = int(re.search('pageNums=(\d+)',url,re.S))
		page_group = []
		for i in range(now_page, total_page):
			#利用re替换掉其中页号内容
			link = re.sub('pageNum=\d+','pageNum=%s'%i, url,re.S)
			page_group.append(link)
		return page_group
	#先抓取每个课程中的大内容
	#source代表的是每个页面内容
	def geteveryclass(self,source):
		everyclass = re.findall('(
  • )',source,re.S) return everyclass; #对每个大的内容再进行解析得到对应的详细的信息 def getinfo(self,eachclass): #创建了一个字典 info = [] info['title'] = re.search('target="_blank">(.*?)', eachclass, re.S).group(1) info['content'] = re.search('

    (.*?)

    '.eachclass,re.S).group(1) timeandlevel = re.findall('(.*?)',eachclass,re.S).group(1) info['classtime'] = timeandlevel[0] info['classlevel'] = timeandlevel[1] info['learnnum'] = re.search('"(.*?)',eachclass,re.S).group(1) return info #将列表中保存的每一条对应的字典信息写入到本地文件中去 def saveinfo(self,classinfo): f = open('info.txt','a') for each in classinfo: f.writelines('title:' + each['title'] + '\n') f.writelines('content:' + each['content'] + '\n') f.writelines('classtime: ' + each['classtime'] + '\n') f.writelines('classlevel: ' + each['classlevel'] + '\n') f.writelines('learnnum': + each['learnnum'] + '\n\n') f.close() if __name__ == '__main__': #定义一个列表,里面保存的字典信息对应的是每个课程的详细信息 classinfo = [] url = 'http://www/jikexueyuan.com/course/?pageNum=1' #实例化一个spider对象 jikespider = spider() #获取所有的页面链接 all_links = jikespider.changepage(url,20) #对所有的页面进行抓取 for link in all_links; print '正在处理页面: ' + link #先获得所有内容 html = jikespider.getsource(link) #提取大块数据 everyclass = jikespider.geteveryclass(html) #在大块数据中再提取小块数据 for each in everyclass: info = jikespider.getinfo(each) #最后将返回的结果加入到classinfo这个列表中去 classinfo.append(info) #保存所有的信息 jikespider.saveinfo(classinfo)

  • 你可能感兴趣的:(Python爬虫学习)