Python开发爬虫之理论篇
爬虫简介
爬虫:一段自动抓取互联网信息的程序。
什么意思呢?
互联网是由各种各样的网页组成。每一个网页对应一个URL,而URL的页面上又有很多指向其他页面的URL。这种URL之间相互的指向关系就形成了一个网络,这就是互联网。
正常情况下就是我们采用人工点击的方式,去获取互联网上指定的信息,这种方式的特点是覆盖面小。
那有没有可能有一种方式,是当我们设定了一个互联网上感兴趣的目标,然后自动地从互联网上去获取我们所需要的数据呢?
有,这就是爬虫。它可以从一个URL出发访问该URL所关联的所有URL,并且从每个页面上提取出我们所需要的价值数据。
也就是说,爬虫就是自动访问互联网,并且提取数据的程序。
爬虫技术的价值
互联网数据,为我所用。
Python简单爬虫架构
1)首先,我们需要一个爬虫调度端。爬虫调度端的作用:启动爬虫,停止爬虫,监视爬虫运行情况。
2)在爬虫程序中有三个模块:URL管理器、网页下载器、网页解析器。
3)URL管理器:对将要爬取的和已经爬取过的URL进行管理;可取出待爬取的URL,将其传送给“网页下载器”。
4)网页下载器:将URL指定的网页下载,存储成一个字符串,在传送给“网页解析器”。
5)网页解析器:解析网页可解析出
①有价值的数据
②另一方面,每个网页都包含有指向其他网页的URL,解析出来后可补充进“URL管理器”
此时,这三个模块就形成了一个循环,只要有感兴趣的URL,这三个模块就会一直循环下去。
Python简单爬虫架构的动态运行流程(以时序图的方式展示)
Python爬虫URL管理
URL管理器:管理待抓取URL集合和已抓取URL集合。
目的:防止重复抓取、防止循环抓取。
Python爬虫URL管理器的实现方式
Python爬虫URL管理器的实现方式具体有三种:
1)使用内存,在Python中主要使用set集合(方便去除重复的元素)
2)使用关系数据库,使用两个字段:url和is_crawled(用来标记是否被爬取)
3)使用缓存数据库,同样使用set集合
其中,大型公司一般选择高性能的缓存数据库。个人,小公司一般使用内存。若是想永久存储,常使用关系数据库。
Python爬虫网页下载器简介
网页下载器:一个工具,通过URL将互联网上对应的的网页以HTML的形式下载到本地存储成本地文件或内存字符串,后进行后续处理;
Python有哪几种网页下载器:urllib2(Python官方模块,基础模块)、requests(第三方模块,功能强大)。
Python爬虫urlib2下载器网页的三种方法
1)urllib2下载网页方法1:最简洁方法
将url直接传给urllib2的urlopen()方法。
对应代码:
2)urllib2下载网页方法2:除url外,添加data、http header。
进行增强处理。
其中,data向服务器提交需要用户输入的数据。
http header用来向服务器提交http的头信息。
对应代码:
代码中request.add_data('a','1') #添加的数据类型为键值对,即a=1。
request.add_header() #可以对url请求进行伪装
3)urllib2下载网页方法3:添加特殊情景的处理器
更大更强的功能处理能力。
对应代码(举例:增强cookie的处理)
Python爬虫urlib2实例代码演示
import urllib2, cookielib url ="http://www.baidu.com" print '第一种方法' respones1 = urllib2.urlopen(url) print respones1.getcode() print len(respones1.read())print "第二种方法" request = urllib2.Request(url) request.add_header("user-agent","Mozillla/5.0") respones2 = urllib2.urlopen(request) print respones2.getcode() print len(respones2.read())print '第三种方法' cj =cookielib.CookieJar() opener = urllib2.bulid_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) print respones3.getcode() print cj print respones3.read()
Python爬虫网页解析器简介
网页解析器:从网页中提取有价值数据的工具。
功能:
1)提取出新的待爬取URL列表;
2)解析出有价值的数据:
网页解析器会以下载好的html网页字符串作为输入,提取出有价值的数据以及新的待爬取的URL列表。
Python有哪些网页解析器呢?
1)正则表达式。最直观的一种。将网页文档down成一个字符串,采用模糊匹配的方式进行提取有价值的数据。虽然直观,但是当网页文档十分复杂的时候,这种方式将十分复杂。
2)使用Python自带的html.parser模块进行解析。
3)使用Beautiful Soup这个第三方插件来解析网页。功能强大的Beautiful Soup可以用html.parser或者lxml作为它的解析器。
4)使用lxml这个第三方插件来解析html网页或者xml文档。
结构化解析——DOM(DOcument Object Model)树
BeautifulSoup第三方模块
BeautifulSoup官网:https://www.crummy.com/software/BeautifulSoup/
安装BeautifulSoup:
如果你安装了pip,那么就简单了,无需从官网下载,打开命令提示符页面。
进入到Python安装目录下的Scripts文件夹路径下,输入“pip install beautifulsoup4”,即可进行自动安装。
安装完,在eclipse中进行测试,新建一个Python模块,输入:
import bs4 print bs4
输出为:
证明安装成功。
BeautifulSoup的语法
其中搜索节点的find_all()方法可以搜索出所有符合要求的节点,而find()方法则只是搜索出符合条件的第一个节点。但是两个函数的参数是完全相同的。
对应代码:
1)创建BeautifulSoup对象
2)搜索节点(find_all、find)
其中红色部分为正则表达式形式。
最后一句之所以"class_"要加上下划线是因为要和Python的关键字"class"进行区分。
3)访问节点信息
4)BeautifulSoup的实例测试
# coding:utf-8 from bs4 import BeautifulSoup import re print("Python3 的代码如下") html_doc = """ 因字数限制,省略。请到 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-the-tree 复制吧 """soup = BeautifulSoup(html_doc, 'html.parser') print("获取所有的链接") links = soup.find_all('a') for link in links:print(link.name, link['href'], link.get_text())print("获取lacie的链接") link_node = soup.find('a', href="http://example.com/lacie") print(link_node.name, link_node['href'], link_node.get_text()) print("正则匹配") link_node = soup.find('a', href=re.compile(r"ill")) print(link_node.name, link_node['href'], link_node.get_text())print("获取p段落文字") p_node = soup.find('p', class_="title") print(p_node.name, p_node.get_text())
实战演练:爬取百度百科1000个页面的数据
1) 实例爬虫操作步骤
2)Python爬虫实例-分析目标
本篇博客参考慕课网课程:https://www.imooc.com/video/10683
转载于:https://www.cnblogs.com/dudududu/p/8780442.html
Python开发爬虫之理论篇相关推荐
- Python开发爬虫完整代码解析
Python开发爬虫完整代码解析 移除python 三天时间,总算开发完了.说道爬虫,我觉得有几个东西需要特别注意,一个是队列,告诉程序,有哪些url要爬,第二个就是爬页面,肯定有元素缺失的,这个究 ...
- Python开发【第十一篇】:JavaScript
Python开发[第十一篇]:JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏 ...
- Python开发【第六篇】:模块
Python开发[第六篇]:模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一 ...
- Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)
总目录 Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数) Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常) Flutter开发指南之理论篇:Dart语法0 ...
- python分布式爬虫系统_如何构建一个分布式爬虫:理论篇
前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...
- Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据
目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...
由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...
- (二)python网络爬虫(理论+实战)——爬虫分类和基本流程
小白都能学会的python网络爬虫专栏: https://blog.csdn.net/c1007857613/category_12127982.html 序言 本人从事爬虫相关工作已8年以上,从一 ...
- 如何构建一个分布式爬虫:理论篇
## 前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一 ...
最新文章
- 林轩田机器学习基石课程学习笔记1 -- The Learning Problem
- 爬虫9-淘宝商品信息定向爬虫
- 贝叶斯统计:Tweedie公式及其证明
- Android RecyclerView实现横向滚动
- oracle怎样开启服务,Oracle 11g必须开启的服务及服务详细介绍
- C++空指针访问成员函数
- hdu 6852Path6(最短路+最小割)
- Table definition on master and slave does not match
- Feign从配置文件中读取url
- linux转码软件下载,格式工厂linux版
- libfacedetection库 yufacedetectnet-open-v1.prototxt详解
- 如何在升级数据表的同时保留原数据
- Mac查看本机公网IP
- 17995 Stupid thief 组合数学
- [Rscript]探索性因子分析
- d3d透视逆向篇:第8课 通过虚表函数的获取D3D9函数指针
- win10如何共享打印机_局域网内,办公室USB接口打印机如何共享
- Swift学习之--TableView的基本使用
- 项目管理流程之人员管理阶段一
- AD转换器输入之前为何要接一个电压跟随器?