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实现提取文章摘要的方法
Apr 21 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
理解python中生成器用法
Dec 20 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
python列表的增删改查实例代码
Jan 30 Python
Python面向对象之类和对象实例详解
Dec 10 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
详解pycharm配置python解释器的问题
Oct 15 Python
python爬取抖音视频的实例分析
Jan 19 Python
Django实现翻页的示例代码
May 24 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python切片操作实例分析
2018/03/16 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
Python接口开发实现步骤详解
2020/04/26 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
个人评价范文分享
2014/01/11 职场文书
趣味体育活动方案
2014/02/08 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
高中班长竞选稿
2015/11/20 职场文书
公司晚会主持词
2019/04/17 职场文书
mysql全面解析json/数组
2022/07/07 MySQL
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技