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检测网页是否有日常链接
Jun 03 Python
python控制台英汉汉英电子词典
Apr 23 Python
详解Python中dict与set的使用
Aug 10 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
PyQt5每天必学之进度条效果
Apr 19 Python
利用Python如何生成便签图片详解
Jul 09 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
在Django的View中使用asyncio的方法
Jul 12 Python
python global和nonlocal用法解析
Feb 03 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
django数据模型中null和blank的区别说明
Sep 02 Python
python3中确保枚举值代码分析
Dec 02 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 判断字符串中是否包含html标签
2014/02/17 PHP
php检测文本的编码
2015/07/26 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
canvas绘制多边形
2017/02/24 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
对python中return和print的一些理解
2017/08/18 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
事业单位竞聘上岗实施方案
2014/03/28 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
具结保证书范本
2015/05/11 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python