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写的一个简单DNS服务器实例
Jun 04 Python
Windows下PyMongo下载及安装教程
Apr 27 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
python面向对象 反射原理解析
Aug 12 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Django 自定义分页器的实现代码
Nov 24 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
Python实现打乒乓小游戏
Sep 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
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php eval函数用法总结
2012/10/31 PHP
php实现httpRequest的方法
2015/03/13 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
python实现查询IP地址所在地
2015/03/29 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
python set内置函数的具体使用
2019/07/02 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
股权转让协议书范本
2014/04/12 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
孩子教育的心得体会
2014/09/01 职场文书
关于童年的读书笔记
2015/06/26 职场文书
mysql 索引合并的使用
2021/08/30 MySQL
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
Golang 切片(Slice)实现增删改查
2022/04/22 Golang