复杂的网页爬虫,python获取网页指的格式数据

通过python 爬虫从网页上获取多页数标题、内容、时间、等级、学习人数等信息;

# -*-coding:utf-8 -*-
'''
Created on 2017年3月13日

@author: July_whj
'''
import requests
import sys
import re 
#由于网页编码是UTF-8 故将此设置称UTF-8编码,防止中文乱码;
reload(sys)
sys.setdefaultencoding('utf-8')
#创建类
class spjikexuey(object):
    def __init__(self):
        print"开始爬取网页内容。。。"
    #传递网页URL,返回整个页面源码;
    def getsourct(self,url):
        html = requests.get(url)
        return html.text
    #通过re.search 获取指定网页页数;page = 20 ;获取20页数据;返回20条URL;
    def chanegpage(self,url,page):
        now_page = int(re.search('pageNum=(\d+)', url, re.S).group(1))
        page_group = []
        for i in range(now_page,page):
            link = re.sub('pageNum=\d+', 'pageNum=%s'%i, url, re.S)
            page_group.append(link)
        return page_group
    #由getsourct()获取网页源码,通过geteveryclass()进行初步数据节选;缩小数据范围;返回筛选后的html
    def geteveryclass(self,source):
        everyclass = re.findall('li id="(.*?)</li>', source, re.S)
        return everyclass
    #获取标题、内容、时间、等级、学习人数等数据信息;并赋值到info集合
    def getinfo(self,eachclass):
        info = {}
        info['title'] = re.search('class="lessonimg" title="(.*?)" alt="', each, re.S).group(1)      
        info['content'] = re.search('display: none;">(.*?)</p>', each, re.S).group(1)
        timeandlevel = re.findall('<em>(.*?)</em>', each, re.S)
        info['classTime'] = timeandlevel[0]
        info['classlevel'] = timeandlevel[1]
        info['learnnum'] = re.search('"learn-number">(.*?)</em>', each, re.S).group(1)
        return info
    #将抓取数据出储存到info.txt中;
    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'
    jikespider = spjikexuey()
    all_links = jikespider.chanegpage(url, 20)
    for link in all_links:
        print '正在处理页面:'+link
        html = jikespider.getsourct(link)
        print html
        everyclass = jikespider.geteveryclass(html)
        print everyclass
        for each in everyclass:
            info = jikespider.getinfo(each)
            classinfo.append(info)
        jikespider.saveinfo(classinfo)

抓取后结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Julywhj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值