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实现的各种排序算法代码
Mar 04 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
详解Python的三种可变参数
May 08 Python
python获取地震信息 微信实时推送
Jun 18 Python
Django用户认证系统 User对象解析
Aug 02 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
python中Pexpect的工作流程实例讲解
Mar 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中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
javascript 对象的定义方法
2007/01/10 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
Python中一些深不见底的“坑”
2019/06/12 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
2014年行政后勤工作总结
2014/12/06 职场文书
结婚堵门保证书
2015/05/08 职场文书
小学运动会入场词
2015/07/18 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android