Python网络爬虫实例讲解


Posted in Python onApril 28, 2016

聊一聊Python与网络爬虫。

1、爬虫的定义

爬虫:自动抓取互联网数据的程序。

2、爬虫的主要框架

Python网络爬虫实例讲解

爬虫程序的主要框架如上图所示,爬虫调度端通过URL管理器获取待爬取的URL链接,若URL管理器中存在待爬取的URL链接,爬虫调度器调用网页下载器下载相应网页,然后调用网页解析器解析该网页,并将该网页中新的URL添加到URL管理器中,将有价值的数据输出。

3、爬虫的时序图

Python网络爬虫实例讲解

4、URL管理器

URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重复抓取与循环抓取。URL管理器的主要职能如下图所示:

Python网络爬虫实例讲解

URL管理器在实现方式上,Python中主要采用内存(set)、和关系数据库(MySQL)。对于小型程序,一般在内存中实现,Python内置的set()类型能够自动判断元素是否重复。对于大一点的程序,一般使用数据库来实现。

5、网页下载器

Python中的网页下载器主要使用urllib库,这是python自带的模块。对于2.x版本中的urllib2库,在python3.x中集成到urllib中,在其request等子模块中。urllib中的urlopen函数用于打开url,并获取url数据。urlopen函数的参数可以是url链接,也可以使request对象,对于简单的网页,直接使用url字符串做参数就已足够,但对于复杂的网页,设有防爬虫机制的网页,再使用urlopen函数时,需要添加http header。对于带有登录机制的网页,需要设置cookie。

6、网页解析器

网页解析器从网页下载器下载到的url数据中提取有价值的数据和新的url。对于数据的提取,可以使用正则表达式和BeautifulSoup等方法。正则表达式使用基于字符串的模糊匹配,对于特点比较鲜明的目标数据具有较好的作用,但通用性不高。BeautifulSoup是第三方模块,用于结构化解析url内容。将下载到的网页内容解析为DOM树,下图为使用BeautifulSoup打印抓取到的百度百科中某网页的输出的一部分。

Python网络爬虫实例讲解

关于BeautifulSoup的具体使用,在以后的文章中再写。下面的代码使用python抓取百度百科中英雄联盟词条中的其他与英雄联盟相关的词条,并将这些词条保存在新建的excel中。上代码:

from bs4 import BeautifulSoup 
import re 
import xlrd 
<span style="font-size:18px;">import xlwt 
from urllib.request import urlopen 
 
 
 
excelFile=xlwt.Workbook() 
sheet=excelFile.add_sheet('league of legend') 
## 百度百科:英雄联盟## 
html=urlopen("http://baike.baidu.com/subview/3049782/11262116.htm") 
bsObj=BeautifulSoup(html.read(),"html.parser") 
#print(bsObj.prettify()) 
 
row=0 
 
for node in bsObj.find("div",{"class":"main-content"}).findAll("div",{"class":"para"}): 
  links=node.findAll("a",href=re.compile("^(/view/)[0-9]+\.htm$")) 
  for link in links: 
    if 'href' in link.attrs: 
      print(link.attrs['href'],link.get_text()) 
      sheet.write(row,0,link.attrs['href']) 
      sheet.write(row,1,link.get_text()) 
      row=row+1 
 
 
excelFile.save('E:\Project\Python\lol.xls')</span>

输出的部分截图如下:

Python网络爬虫实例讲解

excel部分的截图如下:

Python网络爬虫实例讲解

以上就是本文的全部内容,希望对大家学习Python网络爬虫有所帮助。

Python 相关文章推荐
Python中转换角度为弧度的radians()方法
May 18 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
python将字符串转换成json的方法小结
Jul 09 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
通过代码实例了解Python sys模块
Sep 14 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
python实现黄金分割法的示例代码
Apr 28 Python
Python脚本实现自动发带图的微博
Apr 27 #Python
Python实现新浪博客备份的方法
Apr 27 #Python
Python2.7简单连接与操作MySQL的方法
Apr 27 #Python
Python判断文本中消息重复次数的方法
Apr 27 #Python
python脚本监控docker容器
Apr 27 #Python
Python多进程同步简单实现代码
Apr 27 #Python
Python对象转JSON字符串的方法
Apr 27 #Python
You might like
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PHP CURL使用详解
2019/03/21 PHP
JavaScript面象对象设计
2008/04/28 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
浅析JavaScript动画
2015/06/10 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
jQuery实现评论模块
2020/08/19 jQuery
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
九年级体育教学反思
2014/01/23 职场文书
庆八一活动方案
2014/01/25 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
妇女工作先进事迹
2014/08/17 职场文书
市场营销计划书范文
2015/01/16 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS