问答网站源码下载-7行代码,如何爬取豆瓣视频数据

题图来自正版图库图片昆虫创意

全文共6424字,7张图片,阅读需要15分钟

工作中,如果你想找“产品设计”,直接在搜索引擎上输入内容,就能直接找到数以百万计的素材。

上下班的路上,浏览新闻类应用的时候,只要你愿意,就会有源源不断的新信息,足够的时间一路浏览。

搜索引擎和(大多数)新闻应用程序并不生产自己的内容(虽然有些平台孵化自己的内容,但只占整个平台内容的很小一部分,更重要的是成本非常高)。

那么,他们的大部分内容来自哪里?

“我们不生产内容,我们只是内容的搬运工”,将互联网上的内容“搬”到我们自己的服务器上,这就是爬虫。

首先,我们需要了解互联网的结构:

互联网上有数以亿计的内容。 虽然很复杂,但却是一个庞大的网络。 互联网上的每个节点都是一个网页。 连接网页的超链接(Hyperlinks)相当于线,线将所有的节点连接在一起。 ,形成一个复杂的网络。

通过点击超链接的文字或图片,可以跳转到相应的网页。 爬虫可以手动访问每个网页并保存网页内容。

世界上第一个网络爬虫是由麻省理工学院中学生马修·格雷(Matthew Gray)于1993年编写的,随后的爬虫变得越来越复杂。

例如:可以实现更快的访问速度、访问更多的网页、更好地解析网站的内容。 但爬虫的基本原理是相同的,主要包括三个部分:访问网页链接、下载网页内容、解析网页内容。

爬虫的工作过程和我们寻找网页的过程是一样的。

比如我们要查看豆瓣上最新的电影:首先在浏览器地址栏输入URL链接; 之后浏览器会跳转到豆瓣电影; 最后,我们可以找到当前上映的电影。

同样,最简单的爬虫也可以分三步爬取一个网页:

访问该网页;

下载网页内容;

解析下载的内容。

1. 7行代码爬取豆瓣视频

最简单的爬虫三步就可以爬取一个网页,那么需要写多少行代码呢?

我们来写一个爬虫来爬取豆瓣的“每周口碑榜”,只需7行代码!

这里我们使用Python语言——至于为什么选择Python语言,我们在前面会解释清楚。 不懂Python也没关系,只要了解爬虫是如何工作的就可以了。

代码如下所示:

从 lxml 导入请求

import html url='' # 1.需要爬取数据的URL

page=requests.Session().get(url) # 2.访问网页

tree=html.fromstring(page.text) # 3.解析网页的过程

结果=tree.xpath('//td[@class="title"]//a/text()') #4. 解析网页的过程

print(result) # 打印结果

在Python环境中运行这几行代码,就可以得到“本周单词列表”,结果如下:

[《迦百农》、《绿皮书》、《驯龙高手3》、《即时家庭》、《阿丽塔:战斗天使》、《肤色》、《死亡天使》、《黎明之墙》、《小《小巨人》、《Out·Road》]

最重要的是解析网页内容,主要是那行代码('//td[@class="title"]//a/text()'),这可能是大多数人所困扰的。

这就涉及到HTML网页的结构:

你可以把网页理解为一个文件夹,打开一个文件夹,你会发现子文件夹,子文件夹其实还有文件夹; 通过一一打开文件夹,您终于可以找到您需要的数据。

至于这行代码怎么写,可以通过右键网页空白处查看源代码找到对应的td、class=”title”、a等标识符。

大多数程序员选择Python来编写爬虫的原因很简单:

问答网站源码下载_问答源码下载网站安装_问答源码下载网站官网

首先,python有很多库,可以直接调用。 例如,上面的代码引入了requests和lxml库,分别实现访问网页和分析网页结构。 如果有开源库,直接调用就可以了,避免重复发明轮子。

其次,python编写起来很方便,也很容易配置。 只需几行代码就可以直接运行它。 如果使用C或Java,配置环境可能需要很长时间。

2. 一个简单的爬虫系统

通过单独实现其中的每个步骤(模块化),可以形成一个简单的爬虫系统。

使用URL(可以理解为URL链接)管理器管理所有URL链接,使用HTML(可以理解为网页内容)下载器下载网页内容,使用HTML解析器分析下载的内容,加上数据存储模块,控制调度整个爬虫模块构成了一个简单的爬虫系统。

爬行动物的基本结构

更具体地说,URL管理器负责管理所有的URL链接,记录哪些URL已经被爬取,哪些URL还没有被爬取。 如果已经被爬取,必须阻止再次下载; 如果没有,则必须将其添加到队列中并等待 HTML 下载器下载。

HTML下载器可以从服务器下载整个网页的内容,从URL管理器获取未爬取的URL链接,然后访问这些网页链接来下载网页。

HTML解析器负责解析下载的网页。 它有两个主要任务:一方面,它解析出必要的信息,例如上面的“每周声誉列表”;另一方面问答网站源码下载,它解析出必要的信息。 另一方面,解析出新的URL链接,交给URL管理下载器,继续下载,这个功能在前面的“7行代码”中是没有实现的。

数据内存实现了存储数据的功能,存储了HTML解析器解析出来的信息,否则每次使用的时候都要下载,会浪费很多时间。

图片、文档等文件可以直接保存到服务器,文本文件可以通过数据库存储。

爬虫调度器作为系统的大脑,负责协调其他四个模块的协调工作。

无论是小型爬虫还是大型爬虫,似乎在设计细节和性能上都存在差异,但都不会脱离这​​五个模块。

3、更深入的考虑

乍一看,每个模块实现起来似乎都很简单,但仔细想想,似乎每个模块都要考虑很多东西。

1. 如何获取初始URL链接

7行代码爬取豆瓣视频,直接访问URL链接()即可爬取“周信誉榜”。 对于稍大一点的爬虫系统或者商业爬虫来说,需要更多的考虑:在保证获取足够信息的同时,还要保证下载的质量。

对于搜索引擎公司来说,需要尽可能收录互联网上的所有信息; 对于垂直领域来说,更偏向于商业信息。

例如:对于新闻类应用,主要包括一些新闻网站、政府网站等,他们可能对Github等编程网站不感兴趣。

问答源码下载网站安装_问答网站源码下载_问答源码下载网站官网

巧妇难为无米之炊,最初的URL链接基本上都是手动凭经验获得的。 例如,对于新闻类应用,其初始URL列表可能包括新浪、网易、搜狐等门户网站,以及各级政府网站。 还有人民网、新华社、人民日报等媒体网站。

2.如何判断哪个网页已经被下载

当下载页面时,从网页中提取URL链接,并将其添加到等待下载的队列中,以便获取更多的URL链接。

如果网页已经下载过,重新下载会消耗大量时间并占用存储空间。 更糟糕的是,如果你继续重复下载,你可能会陷入无限循环。

那么,如何知道该 URL 是否已被下载呢?

对于大型爬虫,可以使用列表来存储下载的URL链接。 当有新的URL链接时,首先检查列表中是否有该URL链接。 如果有则无需插入,如果没有则插入列表等待访问下载。

对于小型爬虫来说,有数百个“小爬虫”(更专业的术语叫分布式爬虫),分布在不同的服务器上,同时爬取URL链接,需要考虑的事情就更多了。

比如:不同爬虫之间的分工和沟通,如何共同维护上面的列表。

当数据非常大时,需要考虑分发、通信、存储、带宽等各个环节的限制。 无论哪个环节做得不好,都可能成为系统的困境。 这就像木桶效应。 弱点。

如果数据量减少10倍,之前的代码可能要重新绘制,工作量可能会减少100倍。 这也是量变导致质变的一个很好的反例。

在计算机领域,这样的案例随处可见。 当数据减少到一定程度时,原来的算法可能很难继续使用,需要重新开发,随之而来的是超时、DEBUG和延迟上线。

3. 页面分析

爬取豆瓣电影的“每周口碑榜”,需要研究网页源码,编写相应的解析代码。 但是,网页的结构不同。 用这段代码爬取知乎,什么都解析不了。

以新闻应用为例:一个好的新闻应用需要抓取数亿个网页,并解析其中的文本、视频和图片。 难度可想而知。

好消息是,有些网站会遵循RSS规范(符合RSS规范的网页的结构和代码都是相似的,以便订阅者获取主要信息),而一种爬虫可以爬取大量这样的相似内容网页。 然而,大多数网站的结构都不同,这需要算法工程师花费大量的时间和精力进行分析。

4、反爬虫

新闻类APP通过爬虫获取大量优质资源,读者愿意在一个平台上看到所有内容,但“爬行”的网站却不太乐意。 对于大多数依靠广告收入的网站来说,没有流量,连生存都成为问题,更不用说盈利了。

一些自成一体的平台,比如:大型电商平台,他们希望所有的用户都在自己的平台上找到信息,所有的店铺都在自己的平台上吸引买家(广告费不能付给搜索引擎) ,同样不想被爬行动物吓倒。

搜索引擎希望抓取更多的信息,优质内容提供商又不想被爬虫吓倒,利益冲突无法调和,所以Robots协议就为了解决这个问题而形成。

Robots协议网站服务器的声明通常是一个TXT格式的文件,存放在网站的根目录下。 网站通过Robots协议告诉搜索引擎:哪些页面可以被抓取? 哪些页面无法抓取?

问答源码下载网站安装_问答网站源码下载_问答源码下载网站官网

当爬虫访问某个站点时,它会首先检查该站点根目录中是否存在robots.txt。 如果存在,爬虫会根据文件中的内容确定访问范围; 如果该文件不存在,则所有爬虫都将能够访问网站上不受密码保护的所有页面。

我们在使用搜索引擎时,经常会看到“由于网站robots.txt文件中的限制(限制搜索引擎抓取),系统无法提供该页面的内容描述”,就是从这份合同开始的。

值得注意的是,《机器人协议》是互联网社区共同的道德准则,不具有强制约束力。

一些“不道德”的爬虫也会抓取带有robots.txt限制指令的网站。 这时候就需要一些技术来实现反爬虫。

最常见的是三种形式:

1、网站会根据IP地址访问频率判断是否为爬虫

每个笔记本都有一个唯一的IP地址,每个爬虫也有一个唯一的IP地址。 当笔记本或者爬虫访问某个网站时,该网站会记录这个IP地址。 如果同一个IP在短时间内多次访问同一个网站,网站可能会倾向于认为这是一个爬虫,并采取一些措施。

最常见的是验证码、点击图片等认证机制。

当我们使用12306买票的时候,总是需要点击图片,这就是一种反爬虫机制——因为爬虫太多了,一个爬虫每秒可以达到几十万次点击。 购买门票的数量甚至超过了点击的人数。 因此,完全使用身份验证机制即可。

当然,反爬虫的同时,也会给用户带来一些不好的体验。

相比之下,一些优秀的网站或应用程序会根据用户点击频率、时间间隔等信息来判断是否是爬虫或误点击,然后确定是否需要验证。

更好的用户体验背后是更大的开发成本和更长的开发周期。

2、网站还可以根据用户请求的header来判断是否是爬虫

当我们使用浏览器访问一个网站时,浏览器会在访问开始时手动添加一些信息到访问请求中,比如:浏览器使用的编码方式、使用的操作系统、浏览器版本等信息要求。 作为标题,爬虫通常不会附加此类信息。

网站会根据标头信息是否存在以及标头信息的内容判断对方是否为爬虫,必要时拒绝访问。

3、动态页面反爬虫

以前的HTML网页都是静态的。 随着HTML代码的生成,页面的内容和显示效果不会改变。 动态网页则不然。 动态网站是由脚本语言(如PHP)生成的,有些内容是不直接可见的,而只能通过运行一些脚本才能看到。

URL后缀为htm、html、shtml、xml的网页为静态网页,而动态网页后缀为aspx、.asp、.jsp、.php、.perl、.cgi等,还有标志性符号“?”,这些不同的后缀基本上代表了网页所使用的语言。

访问静态网页只需直接访问链接即可。 访问动态网站,需要执行一些特定的操作(如点击)来显示更多的内容,从而降低了爬行的难度。 一些简单的爬虫可能会被拒绝。

介绍完三种主流的反爬虫方法,最后要说的是:反爬虫技术并不是一劳永逸的。 在反爬虫的发展过程中,爬虫也进化出了一系列反“反爬虫”的形态。

针对反爬虫验证IP机制,爬虫“进化”出一个IP代理池,使得爬虫可以不断改变自己的IP地址来迷惑反爬虫。 对于 headers 验证,爬虫也会生成 headers 信息,甚至对于动态页面,它也会模拟浏览器的行为。

即便如此,反爬虫在一定程度上增加了爬虫的成本,降低了爬虫的效率,并且可以将很大一部分爬虫拒之门外。

从爬虫和反爬虫的例子也可以看出:很多时候,没有绝对有效的方法。 抬高对方的成本,让对方认为成本太高,得不偿失,才是解决问题的好办法。

5.爬虫实现冷启动:胜利就是正义?

以上介绍了爬虫的​​工作原理,以及常见的反爬虫机制。 最后说一个爬虫应用场景的例子,可以帮助我们更好的理解爬虫。

冷启动是每个产品总监、运营商、创业者面临的一大难题。 没有优质内容就无法吸引用户,没有大量用户就难以吸引优质内容,就会陷入先有鸡还是先有蛋的悖论。

爬虫,低成本快速解决这个问题!

“我们不生产新闻,我们只是新闻的搬运工。” 通过爬虫,我们可以低成本、快速地从整个互联网爬取优质内容,并利用海量数据,利用算法实现内容分类和个性化推荐,吸引大量用户。 最终通过广告盈利。

事实证明:这是一个非常成功的商业模式。 然而媒体平台、新闻网站雇佣大量编辑,花费大量时间和金钱写出的高质量内容,连一句话都不说,就被拿走了。 这不是侵犯他人的版权吗?

于是,多家媒体联合发起侵权诉讼或抗议,最终促使新闻巨头支付版权费,但无论存在多少法律和道德问题问答网站源码下载,都不会影响该公司商业成功的既定事实。

类似的事情也发生在其他垂直领域。

新成立的科技博客平台抓取竞争对手的文章,快速聚合优质内容。 如果原博主发现自己的文章被盗,新平台将交出账号,并视情况给予一定补偿。 如果对方不愿意,就注销账号,就像什么都没发生一样。 通过这些操作形式,成功实现了冷启动。

短视频应用的后来者也可以通过类似的方式实现用户积累和优质内容聚合。

胜利就是正义?

这其实是一种过于草率的评价。

上述视频应用程序太过分,引起公愤,最终不得不关闭自己的平台。

对于通过爬虫获取内容的平台来说,获取内容只是万里长征的第一步。 更负责任的是通过运营手段降低内容生产成本,通过利益分享鼓励优质内容形成,通过技术降低信息成本吸引用户。 沉重而遥远。

而版权一直是悬在头顶的达摩克利斯之剑。

- - - / 结尾 / - - -