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之引用和类属性的初步理解
May 15 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
python实现飞机大战项目
Mar 11 Python
Python批量处理csv并保存过程解析
May 16 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
解析link_mysql的php版
2013/06/30 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP实现的json类实例
2015/07/28 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python能做什么
2020/06/02 Python
英语专业个人求职自荐信
2013/09/21 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang