Python爬虫,爬取实验楼全部课程
目的:
使用requests库以及xpath解析进行实验楼所有课程,存入MySQL数据 库中。
准备工作:
首先安装,requests库,lxml库,以及peewee库。在命令行模式,使用以下命令。
pip install requests
pip install lxml
pip install peewee
然后,就可以打开编辑器编写代码了。
代码:
# 引入所需要的库
import time
import requests
from peewee import *
from lxml import etree
# 这个程序要倒着看 # 这个是连接数据库的,名字和密码根据自己情况修改
db = MySQLDatabase('shiyanlou', user='root', passwd='xxxxxx') class Course(Model):
title = CharField()
teacher = CharField()
teacher_courses = IntegerField()
tag = CharField()
study_num = IntegerField()
content = CharField() class Meta:
database = db Course.create_table() def parse_content(url, title, tag, study_num):
print('课程地址:' + url)
res = requests.get(url)
xml = etree.HTML(res.text)
# 获取页面里的简介
try:
content = xml.xpath('//meta[@name="description"]/@content')[0]
except Exception as e:
content = '无'
# 获取老师名字
try:
teacher = xml.xpath(
'//div[@class="sidebox mooc-teacher"]//div[@class="mooc-info"]/div[@class="name"]/strong/text()')[0]
except Exception as e:
teacher = '匿名'
# 获取老师发表课程数目
try:
teacher_courses = xml.xpath(
'//div[@class="sidebox mooc-teacher"]//div[@class="mooc-info"]/div[@class="courses"]/strong/text()')[0]
except Exception as e:
teacher_courses = '未知'
# 存入数据库
try:
course = Course(title=title, teacher=teacher,
teacher_courses=int(teacher_courses), tag=tag, study_num=int(study_num), content=content)
course.save()
except Exception as e:
print('一条数据存取失败') def get_course_link(url):
# 获取每一页的信息,传给下一个函数
response = requests.get(url)
xml = etree.HTML(response.text)
# contains()是包含的意思
courses = xml.xpath(
'//div[contains(@class, "col-md-3") and contains(@class, "col-sm-6") and contains(@class, "course")]')
for course in courses:
try:
url = 'https://www.shiyanlou.com' + course.xpath('.//a/@href')[0]
except Exception as e:
print('一个课程页面未获得')
continue
title = course.xpath('.//div[@class="course-name"]/text()')[0]
study_people = course.xpath(
'.//span[@class="course-per-num pull-left"]/text()')[1].strip()
# study_people = int(study_people)
try:
tag = course.xpath(
'.//span[@class="course-money pull-right"]/text()')[0]
except Exception as e:
tag = "普通"
parse_content(url=url, title=title, tag=tag, study_num=study_people)
# time.sleep(0.5) def main():
# 通过requests库的get获得目标地址的返回信息,类型为Response
response = requests.get('https://www.shiyanlou.com/courses/')
# 将返回信息的文本转化为xml树,可以通过xpath来进行查询
xml = etree.HTML(response.text)
# 由分析网页源代码可以总结,url分页模式,只有最后的数字不一样
course_link = 'https://www.shiyanlou.com/courses/?category=all&course_type=all&fee=all&tag=all&page={}'
# 这里获得最大页数就可以了,xpath()函数里的便是寻找路径了
# //会在全文来进行查找,//ul则是查找全文的ul标签,//ul[@class="pagination"]会仅查找有class属性,
# 且为"pagination"的标签,之后/li是查找当前的ul标签下的li标签(仅取一层),取查询到的列表倒数第二个标签
# 为li[last()-1],/a/text()查询a标签里的文本内容
page = xml.xpath('//ul[@class="pagination"]/li[last()-1]/a/text()')
if len(page) != 1:
print('爬取最大页数时发生错误!!')
return None
# page原是一个列表,这里取出它的元素,并转化为Int型
page = int(page[0])
# 将每一页的url传给get_course_link函数进行处理
for i in range(1, page + 1):
# 填入course_link,获取完整url
url = course_link.format(i)
print('页面地址:' + url)
# 调用另一个函数
get_course_link(url) if __name__ == '__main__':
# 调用main函数
main() # [Finished in 218.5s]
Python爬虫,爬取实验楼全部课程的更多相关文章
- python爬虫—爬取英文名以及正则表达式的介绍
python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...
- Python爬虫 - 爬取百度html代码前200行
Python爬虫 - 爬取百度html代码前200行 - 改进版, 增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- 使用Python爬虫爬取网络美女图片
代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...
- Python爬虫|爬取喜马拉雅音频
"GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...
- python爬虫爬取内容中,-xa0,-u3000的含义
python爬虫爬取内容中,-xa0,-u3000的含义 - CSDN博客 https://blog.csdn.net/aiwuzhi12/article/details/54866310
- Python爬虫爬取全书网小说,程序源码+程序详细分析
Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...
- 一个简单的python爬虫,爬取知乎
一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: # -*- cod ...
- python爬虫-爬取百度图片
python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...
- python爬虫---爬取王者荣耀全部皮肤图片
代码: import requests json_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win ...
随机推荐
- Debian 跨版本升级
相对于某些重量级 Linux 发行版而言,同样是通过网络跨版本升级,Debian 的升级过程总要显得轻快很多.不会因为要下载数量惊人的软件包并安装而把升级时间拉得很长,也不用担心中途某些程序崩溃退出导 ...
- missfresh问题记录
一.基本信息 1.登陆机器 ssh lina02@mjump.missfresh.net -p2222 二.问题 1.分页问题:job_id为空时能查询出来(笛卡尔乘积),需要加上AND res ...
- (转)通过MySQL复制线程SQL_Thread加快增量恢复binlog
数据回档常常是使用全量备份+binlog增量实现的.而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题,因为恢复binlog速度十分慢,并且容易出错. 恢复binlog文件一般有两种方法: ...
- 一文读懂DDD
何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从. 有的 ...
- c#基础 里氏转换
1.里氏转换1).子类可以赋值给父类2).如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象. 2.子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员. //// 1.里氏转换 ...
- swift3.0 项目引导页
项目引导页并不难,使用 UICollectionView就可以完成, 1.首先获取应用程序的版本号,并存入本地,每次有新版本号,和存入本地的版本号,相比较 fileprivate func setup ...
- git从无到有建立一个仓库并上传文件
第一步,创建仓库 登录自己的码云 第二步,本地操作 1.到你所要上传的文件夹中右键 选择git bash here 2.初始化项目 git init 3.连接远程仓库 刚才我们建立的时候的远程地址就 ...
- mui实现图片更换(暂未上传)
页面中有默认的图片,触发type为file的input时,更换图片,这个是mui移动端的项目,算了,不多说,开码 首先,先在html页面中设置样式,样式我就不给了,贴个布局 <div class ...
- static 关键字用法
static a=0; 就是把a初始化为0:初始值为0而已 即使a是局部变量,每次进入此变量所在的函数,a值还是保持上次赋值: 在中断里建议在局部变量前加上static,以确保此变量值的寿命
- django之模版的自定义函数
- 自定义函数 simple_tag a. app下创建templatetags目录 b. 任意xxoo.py文件 c. 创建template对象 register d. __author__ = ' ...