Python 爬虫学习笔记之单线程爬虫


Posted in Python onSeptember 21, 2016

介绍

本篇文章主要介绍如何爬取麦子学院的课程信息(本爬虫仍是单线程爬虫),在开始介绍之前,先来看看结果示意图

Python 爬虫学习笔记之单线程爬虫

怎么样,是不是已经跃跃欲试了?首先让我们打开麦子学院的网址,然后找到麦子学院的全部课程信息,像下面这样

Python 爬虫学习笔记之单线程爬虫

这个时候进行翻页,观看网址的变化,首先,第一页的网址是 http://www.maiziedu.com/course/list/, 第二页变成了 http://www.maiziedu.com/course/list/all-all/0-2/, 第三页变成了 http://www.maiziedu.com/course/list/all-all/0-3/ ,可以看到,每次翻一页,0后面的数字就会递增1,然后就有人会想到了,拿第一页呢?我们尝试着将 http://www.maiziedu.com/course/list/all-all/0-1/ 放进浏览器的地址栏,发现可以打开第一栏,那就好办了,我们只需要使用 re.sub() 就可以很轻松的获取到任何一页的内容。获取到网址链接之后,下面要做的就是获取网页的源代码,首先右击查看审查或者是检查元素,就可以看到以下界面

Python 爬虫学习笔记之单线程爬虫

找到课程所在的位置以后,就可以很轻松的利用正则表达式将我们需要的内容提取出来,至于怎么提取,那就要靠你自己了,尝试着自己去找规律才能有更大的收获。如果你实在不知道怎么提取,那么继续往下,看我的源代码吧

实战源代码

# coding=utf-8
 import re
 import requests
 import sys
 reload(sys)
 sys.setdefaultencoding("utf8")
 
 
 class spider():
   def __init__(self):
     print "开始爬取内容。。。"
 
    def changePage(self, url, total_page):
     nowpage = int(re.search('/0-(\d+)/', url, re.S).group(1))
     pagegroup = []
 
     for i in range(nowpage, total_page + 1):
       link = re.sub('/0-(\d+)/', '/0-%s/' % i, url, re.S)
       pagegroup.append(link)
 
     return pagegroup
 
def getsource(self, url):
  html = requests.get(url)
  return html.text
 
def getclasses(self, source):
  classes = re.search('<ul class="zy_course_list">(.*?)</ul>', source, re.S).group(1)
  return classes
 
def geteach(self, classes):
  eachclasses = re.findall('<li>(.*?)</li>', classes, re.S)
  return eachclasses
 
def getinfo(self, eachclass):
  info = {}
  info['title'] = re.search('<a title="(.*?)"', eachclass, re.S).group(1)
  info['people'] = re.search('<p class="color99">(.*?)</p>', 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('people : ' + each['people'] + '\n\n')
 
  f.close()
 
 
if __name__ == '__main__':
 
   classinfo = []
   url = 'http://www.maiziedu.com/course/list/all-all/0-1/'
   maizispider = spider()
   all_links = maizispider.changePage(url, 30)
   for each in all_links:
     htmlsources = maizispider.getsource(each)
     classes = maizispider.getclasses(htmlsources)
     eachclasses = maizispider.geteach(classes)
 
     for each in eachclasses:
       info = maizispider.getinfo(each)
       classinfo.append(info)
 
   maizispider.saveinfo(classinfo)

以上代码并不难懂,基本就是正则表达式的使用,然后直接运行就可以看到开头我们的截图内容了,由于这是单线程爬虫,所以运行速度感觉有点慢,接下来还会继续更新多线程爬虫。

应小伙伴们的要求,下面附上requests爬虫库的安装和简单示例

首先安装pip包管理工具,下载get-pip.py. 我的机器上安装的既有python2也有python3。

安装pip到python2:

python get-pip.py

安装到python3:

python3 get-pip.py

pip安装完成以后,安装requests库开启python爬虫学习。

安装requests

pip3 install requests

我使用的python3,python2可以直接用pip install requests.

入门例子

import requests

html=requests.get("http://gupowang.baijia.baidu.com/article/283878")
html.encoding='utf-8'
print(html.text)

第一行引入requests库,第二行使用requests的get方法获取网页源代码,第三行设置编码格式,第四行文本输出。
把获取到的网页源代码保存到文本文件中:

import requests
import os

html=requests.get("http://gupowang.baijia.baidu.com/article/283878")
html_file=open("news.txt","w")
html.encoding='utf-8'
print(html.text,file=html_file)
Python 相关文章推荐
初步探究Python程序的执行原理
Apr 11 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
Python实现股市信息下载的方法
Jun 15 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
Python读取JSON数据操作实例解析
May 18 Python
python实现批量命名照片
Jun 18 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Django静态文件加载失败解决方案
Aug 26 Python
python pip如何手动安装二进制包
Sep 30 Python
Python 爬虫学习笔记之正则表达式
Sep 21 #Python
Python简单实现安全开关文件的两种方式
Sep 19 #Python
Python打包可执行文件的方法详解
Sep 19 #Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 #Python
利用Python画ROC曲线和AUC值计算
Sep 19 #Python
Python文件与文件夹常见基本操作总结
Sep 19 #Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 #Python
You might like
实用函数3
2007/11/08 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python做文本按行去重的实现方法
2016/10/19 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
汽车专业学生自我评价
2014/01/19 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
优秀党员事迹材料
2014/12/18 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
欢送领导祝酒词
2015/08/12 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
Java中的随机数Random
2022/03/17 Java/Android