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修改注册表终止360进程实例
Oct 13 Python
Python实现读取并保存文件的类
May 11 Python
python如何实现反向迭代
Mar 20 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python实现图片彩色转化为素描
Jan 15 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
python函数的万能参数传参详解
Jul 26 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
Django 查询数据库并返回页面的例子
Aug 12 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常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
详解PHP队列的实现
2019/03/14 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
2010/03/01 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
javascript常用的设计模式
2017/02/09 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
python的id()函数解密过程
2012/12/25 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Mac 上切换Python多版本
2017/06/17 Python
python实现简易版计算器
2020/06/22 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
尽职尽责村干部自我鉴定
2014/01/23 职场文书
会计求职自荐信范文
2015/03/04 职场文书
公开致歉信
2019/06/24 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL