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 相关文章推荐
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
python+opencv识别图片中的圆形
Mar 25 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
python中的常量和变量代码详解
Jul 25 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
python绘制规则网络图形实例
Dec 09 Python
Python常用库大全及简要说明
Jan 17 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
Python continue语句实例用法
Feb 06 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python各种excel写入方式的速度对比
Nov 10 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
js 异步处理进度条
2010/04/01 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
使用tensorflow实现AlexNet
2017/11/20 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
python进度条显示之tqmd模块
2020/08/22 Python
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
奥巴马开学演讲稿
2014/05/15 职场文书
计算机实训报告总结
2014/11/05 职场文书
优秀教师申报材料
2014/12/16 职场文书
清洁工岗位职责
2015/02/13 职场文书
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
无线电知识基础入门篇
2022/02/18 无线电
Sql Server之数据类型详解
2022/02/28 SQL Server