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 相关文章推荐
Django Admin实现上传图片校验功能
Mar 06 Python
django框架如何集成celery进行开发
May 24 Python
python 文件操作删除某行的实例
Sep 04 Python
基于python的字节编译详解
Sep 20 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
Django 视图层(view)的使用
Nov 09 Python
django连接oracle时setting 配置方法
Aug 29 Python
如何在sublime编辑器中安装python
May 20 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
详解Python中第三方库Faker
Sep 25 Python
python 发送get请求接口详解
Nov 17 Python
Python性能测试工具Locust安装及使用
Dec 01 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
ftp类(example.php)
2006/10/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
关于Python如何避免循环导入问题详解
2017/09/14 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Python库安装速度过慢解决方案
2020/07/14 Python
用python实现学生管理系统
2020/07/24 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
应聘美工求职信
2013/11/07 职场文书
毕业自我评价范文
2013/11/17 职场文书
公证书标准格式
2014/04/10 职场文书
《学会合作》教学反思
2014/04/12 职场文书
勤俭节约倡议书
2014/04/14 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
大学军训决心书
2015/02/05 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
php访问对象中的成员的实例方法
2021/11/17 PHP
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers