Python爬虫之requests

本文介绍了一个使用Python requests库实现的简单爬虫项目,该爬虫能够抓取极客学院视频库中的课程信息,并将这些信息保存到本地文件。文章详细展示了如何通过requests获取网页源码,使用正则表达式解析数据并进行存储。

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)

03-08
### MathPix工具介绍 Mathpix Snipping Tool 是一款强大的数学公式识别工具,从最初的原型发展至今已经历了多次迭代和功能增强[^1]。该工具不仅能处理简单的数学表达式,还可以应对复杂的数学模型以及多行公式,并且支持手写公式的识别。 这款应用程序通过不断的科技创新与用户反馈改进,在学术研究和技术领域赢得了良好声誉,成为许多科研人员不可或缺的工作伙伴之一。除了基本的功能外,Mathpix 还提供了多种高级特性来满足不同用户的特定需求。 ### 使用方法 #### 安装与启动 为了使用 Mathpix Snipping Tool ,首先需要下载安装程序并按照提示完成设置过程。一旦成功安装后即可随时调用此应用来进行截图操作。 #### 截取屏幕上的公式图像 当遇到想要转换成 LaTeX 或 AsciiMath 的图片时,只需打开软件界面按下快捷键(默认为 `Ctrl+Alt+M`),此时鼠标指针会变为十字形状以便于选取目标区域;框选所需部分之后松开按键即刻上传至云端服务器等待进一步分析处理。 #### 获取LaTeX代码片段 经过短暂几秒钟的时间延迟过后,所截获的内容将以纯文本形式显示出来供复制粘贴到其他编辑器当中继续编写文档或是分享给他人查看交流之用。 ```python import pyperclip # 假设已获取到LaTeX字符串 stored_in_variable named latex_code pyperclip.copy(latex_code) print("LaTeX code has been copied to clipboard.") ``` 对于希望深入探索更多可能性的用户来说,可以考虑查阅官方提供的扩展插件——如用于解析Markdown文件内的公式标记语法的库 **mathpix-markdown-it** [^2] ——这将进一步提升工作效率和个人体验感。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值