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使用cookie库操保存cookie详解
Mar 03 Python
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
浅谈Python中eval的强大与危害
Mar 13 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
深入了解Python enumerate和zip
Jul 16 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
Python访问Redis的详细操作
Jun 26 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python去除字符串中的换行符
2017/10/11 Python
python实现神经网络感知器算法
2017/12/20 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
行政部总经理岗位职责
2014/01/04 职场文书
大学生标准自荐书
2014/06/15 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
python 中的@运算符使用
2021/05/26 Python
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle