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类继承用法实例分析
Oct 10 Python
探究Python中isalnum()方法的使用
May 18 Python
python避免死锁方法实例分析
Jun 04 Python
python删除特定文件的方法
Jul 30 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
Python之pymysql的使用小结
Jul 01 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
Python中for后接else的语法使用
May 18 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 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
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JS动态添加选项案例分析
2016/10/17 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
工业自动化专业毕业生推荐信
2013/11/18 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
工程建设实施方案
2014/03/14 职场文书
公司委托书格式范文
2014/04/04 职场文书
党员对照检查材料
2014/09/22 职场文书
出国留学自荐信模板
2015/03/06 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2022年四月新番
2022/03/15 日漫