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学习之第三方包安装方法(两种方法)
Jul 30 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
opencv 阈值分割的具体使用
Jul 08 Python
Python实现数字的格式化输出
Aug 01 Python
python 爬取豆瓣网页的示例
Apr 13 Python
用Python创建简易网站图文教程
Jun 11 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php中explode与split的区别介绍
2012/10/03 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
深入理解vue Render函数
2017/07/19 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
vue.js中created方法作用
2018/03/30 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
vue中activated的用法
2021/01/03 Vue.js
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
Python异常处理总结
2014/08/15 Python
Python检测生僻字的实现方法
2016/10/23 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
详解Python学习之安装pandas
2019/04/16 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
介绍一下Make? 为什么使用make
2013/12/08 面试题
教师节学生演讲稿
2014/09/03 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang