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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
Djang中静态文件配置方法
Jul 30 Python
Python实现复杂对象转JSON的方法示例
Jun 22 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
python 拼接文件路径的方法
Oct 23 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
Python flask框架post接口调用示例
Jul 03 Python
python批量修改xml属性的实现方式
Mar 05 Python
什么是Python包的循环导入
Sep 08 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
如何Python使用re模块实现okenizer
Apr 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
用PHP调用数据库的存贮过程!
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python3爬虫学习入门教程
2018/12/11 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
Python中如何定义一个函数
2016/09/06 面试题
儿科护士实习自我鉴定
2013/10/17 职场文书
毕业寄语大全
2014/04/09 职场文书
股东协议书
2014/04/14 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
2015年保送生自荐信
2015/03/24 职场文书
学校财务管理制度
2015/08/04 职场文书
python实现过滤敏感词
2021/05/08 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers