零基础爬虫入门(一) | 初识网络爬虫
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—
不温不火
,本意是希望自己性情温和
。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/。
PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!
最近闲来无事,查看自己所写的文章,发现刚开始的排版略显粗糙。因此就想这对刚开始的文章进行一定的修改完善。
前言
大数据背景下,各行各业都需要数据支持,如何在浩瀚的数据中获取自己感兴趣的数据,在数据搜索方面,现在的搜索引擎虽然比刚开始有了很大的进步,但对于一些特殊数据搜索或复杂搜索,还不能很好的完成,利用搜索引擎的数据不能满足需求,网络安全,产品调研,都需要数据支持,而网络上没有现成的数据,需要自己手动去搜索、分析、提炼,格式化为满足需求的数据,而利用网络爬虫能自动完成数据获取,汇总的工作,大大提升了工作效率。因为当今从事科学研究等,需要大量的数据,但是这些数据公开的又非常的少,大量的数据都在大公司的手中。我们这些普通人本身并没有那么多数据,但是我们又需要大量的数据。那么,这时我们就需要用到网络爬虫了。
一、什么是网络爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人),英文名叫Web Crawler
(又称Web Spiader
),是一种自动浏览网页并采集你所需要的信息的程序,被广泛用于互联网搜索引擎(称为通用爬虫)。随着互联网的发展,爬虫技术不再局限于搜索领域,任何人都可以利用爬虫技术从互联网上获取自己想要的信息,如爬取电子书、商品价格等(称为垂直爬虫)。
1、爬虫产生的背景
1.1、万维网的高速发展
- 1. 网页数量增加
- 2. 网页承载的信息量增加
- 3. 网络的拓扑结构复杂化
1.2、搜索引擎的需要
- 1. 提供充分的搜索服务
- 2. 提供精准的搜索结果
- 3. 提供丰富的搜索信息
1.3、领域研究的需要
- 研究网络结构的需要网络关系
- 研究语言的需要语料材料
- 研究用户行为的需要用户资料
2、为什么选用Python进行网络爬虫的编写(优点)
-
语言简洁,简单易学,使用起来得心应手,编写一个良好的
Python
程序就感觉像是在用英语写文章一样,尽管这个英语的要求非常严格!Python
的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 -
使用方便,不需要笨重的
IDE
,Python
只需要一个sublime text
或者是一个文本编辑器,就可以进行大部分中小型应用的开发了。 -
功能强大的爬虫框架
Scrapy
,Scrapy
是一个为了爬取网站数据,提取构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 -
强大的网络支持库以及
html
解析器,利用网络支持库requests
,编写较少的代码,就可以下载网页。利用网页解析库BeautifulSoup
,xpath
登可以方便的解析网页各个标签,再结合正则表达式,方便的抓取网页中的内容。 -
十分擅长做文本处理字符串处理:
python
包含了常用的文本处理函数,支持正则表达式,可以方便的处理文本内容。
3、爬虫的工作原理
网络爬虫是一个自动获取网页的程序,它为搜索引擎从互联网上下载网页,是搜索引擎的重要组成。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。爬虫的工作原理,爬虫一般从一个或者多个初始URL
开始,下载网页内容,然后通过搜索或是内容匹配手段(比如正则表达式),获取网页中感兴趣的内容,同时不断从当前页面提取新的URL
,根据网页抓取策略,按一定的顺序放入待抓取URL
队列中,整个过程循环执行,一直到满足系统相应的停止条件,然后对这些被抓取的数据进行清洗,整理,并建立索引,存入数据库或文件中,最后根据查询需要,从数据库或文件中提取相应的数据,以文本或图表的方式显示出来。
4、网络爬虫的对象
-
1. 网站website
-
新闻类网站
-
社交类网站
-
购物类网站
-
所有你想爬的网站
-
2. API
-
天气类API
-
微博类API
-
只要你能被认证的API
-
3. 流量数据
-
弹幕
-
只要有弹幕的地方
5、简单程序理解爬虫的一般步骤
此处选取的案例为爬取股吧,如果各位感兴趣的话。学长在此给出传送门:爬取股吧
5.1、爬取网页
按照一定的规则,自动地抓取万维网信息地程序或者脚本
- 1. 测试代码
base_url = "http://guba.eastmoney.com/"
start_url = "http://guba.eastmoney.com/default,99_1.html"
headers = { "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
def get_content(url): """获取url对应的内容""" response = requests.get(url=url, headers=headers) return response.content
if __name__ == '__main__': content = get_content(start_url).decode("utf-8") print(content)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 2. 运行结果(先获取出来整个网页的所有内容)
5.2、抽取信息
部分或全部抽取抓取到的信息,使数据进一步结构化
- 1. 代码
# 解析html html_obj = etree.HTML(html) # 使用xpath语法提取 li_list = html_obj.xpath('//ul[@class="newlist"]/li') # 循环 for li in li_list: print(self.index) item = {} item["read"] = li.xpath("./cite[1]/text()")[0].strip() item["comment"] = li.xpath("./cite[2]/text()")[0].strip() item["name"] = li.xpath("./span/a[1]/text()")[0] if li.xpath("./span/a[2]"): item["title"] = li.xpath("./span/a[2]/text()")[0] else: item["title"] = "" if li.xpath("./span/a[2]/@href"): item["url"] = self.base_url + li.xpath("./span/a[2]/@href")[0] else: item["url"] = "" item["author"] = li.xpath("./cite[3]/a/font/text()")[0] item["date"] = li.xpath("./cite[4]/text()")[0].strip() print(item)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 2. 运行结果
5.3、存储信息
将获取到的信息保存到文件或数据库中
- 1. 代码
with open("./股吧.txt", "a", encoding="utf-8") as file: for item in self.items: file.write(",".join(item.values())) file.write("\n")
- 1
- 2
- 3
- 4
- 2. 结果
6、网络爬虫的重要性
-
1. 从工业角度看
1.数据驱动大量数据来源于网络爬虫
2.爬虫的效率决定信息更迭的速度
3.爬虫的准确性决定了服务的准确度 -
2. 从研究角度看
1.研究领域需要干净的数据
2.研究领域需要不花钱的数据
3.几乎所有社交网络研究的benchmark数据都来自爬虫 -
3. 可在工业领域独当一面
1.有数据的地方都有爬虫
2.爬虫是一个闭环的独立工程
3.所有的数据分析都是由爬虫开始 -
4. 可自己做研究
1.自己收集数据
2.自己清理数据
3.自己运算算法
4.自己搞研究
总而言之一句话,爬虫在如今非常重要!!!
在此,学长就给大家展示下学长自己通过收集的数据做的一个可视化demo(只给出最终效果图)
二、爬虫的使用范围
- 是数据产生二次价值的第一步
- 数据分析师的必备技能
- 网站测试者的好伙伴
我们在使用网络爬虫时,需要遵守Robots协议。
三、爬虫的分类
1、深度优先爬虫和广度优先爬虫
- 1. 深度优先爬虫
深度优先是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续追踪链接。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独地一条链。
- 2. 广度优先爬虫
广度优先,有人也叫宽度优先,是指将新下载网页发现地链接直接插入到待抓取URL队列的末尾,也就是指网络爬虫会先抓取起始页中的所有网页,然后在选择其中的一个连接网页,继续徐抓取在此网页中链接的所有网页。
2、静态网页爬虫和动态网页爬虫
- 1. 静态网页爬虫
面向网页读取过程中就完成加载的网页,此类网页的主要信息会在网页加载过程中直接显示在页面上,比如一些新闻网站和比较老的网站。面向静态网页的爬虫页面逻辑比较简单,几行代码就可以完成爬取。
比如说小说网站
- 2. 动态网页爬虫
1.网页读取过程中需要依赖额外的加载过程,比如JavaScript或者jQuery,使用静态网页的爬取方法可能获取不到数据,需要模拟动态加载过程。
2.网页登录过程分页,需要模拟下拉、点击等操作才能加载剩余数据
3.需要登录
比如说古诗词网
3、泛用和主题爬虫
- 1.泛用爬虫
普通的没有策略和着重爬取的爬虫,由于可能会爬取一些无用的数据,效率比较低
- 2.主题爬虫
指选择性地爬取那些于预先定义好地主题相关页面地网络爬虫。和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关地页面,极大地节省了硬件和网络资源,保存地页面也由于数量少而更新块,还可以很好地满足一些特定人群对特定领域信息的需求。
四、爬虫的基本架构
- 网络爬虫的基本架构
需要和实现有一部分我们需要用到辅助模块。
- 爬虫的爬取过程:
- 爬虫的爬取过程解析:
①爬取模块——从万维网上获取数据
- 从一个URL开始批量的获取数据
- 将数据从互联网的海量信息中拉取到爬虫系统中进行处理
②抽取模块——处理获取的数据抽取指定的信息
- 抽取URL加入队列,使程序持久化
- 将原本被HTML、XML、JSON结构化的数据进一步结构化,方便数据库存储
③数据存储模块——将抽取的信息存入指定格式的载体
- 将抽取的信息存入txt、csv、数据库等常见的数据存储中
- 为爬虫提供数据索引,使得爬虫队列可以通过读取数据存储的方式控制爬虫运转
④辅助模块——持久化、队列与多线程
- 持久化
使爬虫可以尽可能长时间稳定运转
控制爬取速度,合理规避简单反爬规则 - 队列
控制爬虫爬取的顺序,实现深度或广度优先策略
承载URL,提供去冲、排序等操作 - 多线程
提高爬虫效率
美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!
好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”
一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注
我哦!
文章来源: buwenbuhuo.blog.csdn.net,作者:不温卜火,版权归原作者所有,如需转载,请联系作者。
原文链接:buwenbuhuo.blog.csdn.net/article/details/105164216
- 点赞
- 收藏
- 关注作者
评论(0)