文档章节

Python爬虫之requests

zitongChan
 zitongChan
发布于 2017/07/09 13:59
字数 468
阅读 7
收藏 0

python爬虫之requests

在python中使用requests简化了网络请求,在使用requests之前需要pip install requests来安装requests,requests中文手册是一个很好的入门资料。
制作爬虫需要对html的结构有一定的了解,同时使用正则表达式原生匹配的爬虫也会随网页结构的改变而失效,所以若使下述代码无效,请分析网页的结构是否发生了改变。
抓取网页:极客学院视频库网页
爬取效果:
图片效果

# -*-coding:utf-8 -*-
import requests
import re
import sys

''' 1.先获取整个网页 2.获取整个网页中的课程块 3.通过正则表达使获取想要的特定内容 '''


class spider(object):
    def __init__(self):
        print(u'开始爬取内容...')


    # 用于获取网页的源代码
    def getsource(self, url):
        html = requests.get(url)
        html.encoding = 'utf-8'
        return html.text

    # 改变链接中的页码数
    def changepage(self, url, total_page):
        now_page = int(re.search('pageNum=(\d+)', url, re.S).group(1))  # 返回页码数
        page_group = []
        for i in range(now_page, total_page + 1):
            link = re.sub('pageNum=\d+', 'pageNum=%s' % i, url, re.S)  # 替换url中的页码数
            page_group.append(link)
        return page_group

    # 抓取每个课程块消息
    def geteveryclass(self, source):
        everyclass = re.findall('(<li id=".*?</li>)', source, re.S)
        return everyclass

    # 从课程块中得到我们想要的信息
    def getinfo(self, eachclass):
        info = {}
        info['title'] = re.search('.*>(.*?)</a></h2>', eachclass, re.S).group(1)
        info['content'] = re.search('.*>(.*?)</p>', eachclass, re.S).group(1).strip()
        timeandlevel = re.findall('<em>(.*?)</em>', eachclass, re.S)
        classtime = timeandlevel[0].split()  # 截取字符中的空格
        info['classtime'] = classtime[0] + classtime[1]
        info['classlevel'] = timeandlevel[1]
        info['learnnum'] = re.search('"learn-number">(.*?)</em>', eachclass, re.S).group(1)
        return info

    def saveinfo(self, classinfo):
        f = open('info.txt', 'a', encoding='utf-8')
        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=2'
    jikespider = spider()
    all_links = jikespider.changepage(url, 20)
    print(all_links)
    for link in all_links:
        print(u'正在处理页面:' + link)
        html = jikespider.getsource(link)
        everyclass = jikespider.geteveryclass(html)
        for each in everyclass:
            info = jikespider.getinfo(each)
            classinfo.append(info)
    jikespider.saveinfo(classinfo)

© 著作权归作者所有

zitongChan
粉丝 4
博文 20
码字总数 25022
作品 0
中山
程序员
私信 提问
Python网络爬虫-你的第一个爬虫(requests库)

0.采用requests库 虽然urllib库应用也很广泛,而且作为Python自带的库无需安装,但是大部分的现在python爬虫都应用requests库来处理复杂的http请求。requests库语法上简洁明了,使用上简单易...

糖宝lsh
01/11
90
0
万方数据库,文献下载的准备,文献信息收集

想批量下载万方数据库的文献,看了一下其html源码不好玩啊. 其一篇文献的下载的链接. 下 载 onclick 事件 onclick 事件会在对象被点击时发生。 请注意, oncli...

东风冷雪
2018/05/23
0
0
Python爬虫入门 1 Python环境的安装

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

闰土学Python
2018/07/28
0
0
Python爬虫入门 ,1 Python环境的安装

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

菜鸟学编程
2018/04/23
0
0
5行python代码实现简单的网络爬虫

1、python代码如下图,我们从 http://gitbook.cn/这网站中爬取数据。 2、运行上图代码之前要下载安装好chardet和requests安装包,可以在我的博客里免费下载这两个安装包。解压好后放到安装p...

YU儿
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
32分钟前
4
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
46分钟前
90
5
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部