首页 > 编程知识 正文

python为什么叫爬虫,python爬虫实例

时间:2023-05-06 09:52:16 阅读:24479 作者:2363

这篇文章的定位是,为有几个python的基础,但对爬行动物一无所知的人而写的。 文章只包括爬行动物最核心的部分,完全避开莫名其妙的漏洞和概念,让读者觉得爬行动物是非常简单的事情,但实际上爬行动物是非常简单的事情(如果不以爬行动物为工作的话)。

本文分为以下几个部分

引言概念介绍HTML介绍解析代码介绍chrome检测工具介绍引言简单理解的网络爬虫是自动抓取网络信息的代码,繁琐的复制&; 可以简单地理解为代替粘贴操作的手段。

首先,我们必须声明爬行动物的对象必须是我们已经看到的页面。 例如,你不能说你想知道哪个用户的关注数最多。 我希望通过写爬行动物来爬上答案。 我必须明确认识这个人,找到主页。 然后用爬行动物抓不到他页面的信息。

让我们用一个简单的例子来展示爬行动物的工作流程。 很多教程的第一篇好像使用的是豆瓣top250,这里取CSDN首页的文章标题,然后链接到这里。 页面的样子是这样的

要抓住标题的完整代码,请执行以下操作

导入import requests #网页请求库导入from bs4 importbeautifulsoup #网页分析库导入# urlr=requests.get (https://www . URLsoup=)分析' html.parser ' (content _ list=soup.find _ all )、attrs={'class': 'title'} ) forcontention

可见,上述过程是最简单、完整的爬行器过程,能够复制和粘贴它们的标题,消除了手动操作的繁琐。 其实爬行动物一般都会做这种事。 例如,我们需要用连锁家的数据进行分析。 看连锁家的网页是这样的

如果想获取各家的标题、几室几厅、几平方米、方向、装修、价格等字段,可以通过爬虫定位,自动获取这100页上所有家的这些字段信息。

注:尚未安装上述两个库的读者可以在命令行上运行以下两行命令来完成安装

pipinstallrequestspipinstallbeautifulsoup 4的概念介绍了解爬行动物是用来做什么的之后,下面是一些最常见的概念

1.URL

URL中文称为统一资源定位符,实际上可以理解为指向网页的链接。 例如,上面的https://www.csdn.net/是URL。

但是,更广义的URL不仅是我们经常看到的web资源的链接,而且是资源在网页内的定位。 我们通常说的网页是资源,加载到网页上的所有图像也是资源,在互联网上有唯一的定位URL。 例如,试着从CSDN的页面中查找照片

链接https://csdn img.cn/feed/2018 03 30/49 F4 CD 810 ad 4606 e3c 45 ed 9e db 16 A8 b8. jpg是此图像资源的定位符,在浏览器中输入此链接时会显示该图像

但是,如果你知道这些就好了,我们通常说的传入URL就是放入网页的链接。 在上面的代码中

r=requests.get (https://www.csdn.net/' )表示正在将URL传递给请求函数。

2 .网页请求

说到网络请求,我们平时浏览网页的时候,就需要谈谈信息交流的模式是什么样的。 我们平时在浏览器上浏览网页的时候,用鼠标点击了链接。 例如,如果您现在单击此处,实际上浏览器会向此页面发送请求(request )。 维护网页的服务器)可以理解为云上的一台电脑。 保持此CSDN上的每个页面) ) ) ),则确定此请求有效,并显示一些响应消息) response

用代码模拟这个过程。 上面的requests.get是代码向此页面发送了此请求。 判断请求有效后,网页服务器也会发送信息,并将发送来的信息代入变量r。 这个变量r包含了我们想要的信息和我们想提取的标题。

看看在print(r.text )里有什么

让我们看看网页的源代码。 详细说明如何理解这个源代码,以及如何查看下一节中的HTML这个源代码。

源代码和r.text其实一模一样。 r.text其实是一个字符串,字符串中有我们抓住的所有标题。 我们用字符串匹配方法(比如正则表达式)提取他们就可以了。 爬行动物很有感觉吗

简单呢?只要这样傻瓜操作

r = requests.get('https://www.csdn.net/')

再直接从r.text字符串中提取信息即可。其实爬虫就是这么简单。

但是解析是怎么回事呢,为什么刚刚不直接用正则而要用bs4呢?因为方便,但是正则也是完全可以的,只是相对麻烦一些、需要写更多的代码而已。

3.网页解析

网页解析其实就从网页服务器返回给我们的信息中提取我们想要数据的过程。其实使用正则表达式提取我们要的标题的过程也可以称为网页解析。

因为当前绝大多数网页源代码都是用HTML语言写的,而HTML语言时非常有规律性的,比如我们要的所有文章标题都具有相同结构,也就是说它周围的字符串都是非常类似的,这样我们才能批量获取。所以就有大佬专门封装了如何从HTML代码中提取特定文本的库,也就是我们平时说的网页解析库,如bs4 lxml pyquery等,其实把他们当成处理字符串的就可以了。

为了更清楚地了解如何对网页进行解析,我们需要先粗略掌握HTML代码的结构。

HTML介绍

引用维基百科中的一段话来介绍HTML

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面[1]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。

为了让读者对HTML有更清楚的认识,我们来写一点简单的HTML代码。用文本编辑器(记事本也可以)创建一个名字为a.html的文件,爱撒娇的冰淇淋写下如下代码

<!DOCTYPE html><html><head><title>爬虫基本原理</title></head><body><h1>HTML介绍</h1><p>第一段</p><p>第二段</p></body></html>

保存,然后你双击这个文件,就会自动用浏览器打开,然后你就能看到下面这个样子的页面

你如果按照我的操作来做的话,你已经创建了一个简单的网页,现在你看到的所有网页都是这样设计的,只是比你的复杂一点而已,不信你去看看刚才截图下来的网页源代码图片。

接下来,我们来看一下HTML语言的特点。最重要的一点是,文本都是被标签(h1标签 p标签)夹在中间的,而这些标签都是特定的,有专门用途的。比如<h1>就表示一级标题,包爱撒娇的冰淇淋的文本自然会被放大显示;而<p>标签则表示段落。

再看上面的源代码截图,head meta script title div li每一个都是标签,层层嵌套。我们完全不需要知道总共有哪些种标签,也不需要知道这些标签都是用来干什么的,我们只要找到我们要的信息包含在什么标签里就行了。比如使用正则表达式就直接用<p>(.*?)</p>就可以把里面的内容提取出来了。

但是事实好像没有那么简单,看上面的截图标签怎么是这样的<nav id="nav" class="clearfix">?其实这是一个<nav>标签,后面的id class是这个标签的属性。

为什么要给标签设置属性呢?我们先考虑这样一个问题:我们看到的网页千差万别,文字的颜色字体等都不一样,这是怎么设置的呢?答案是使用css样式。

css语句类似这样

h1 { color: white; text-align: center;}p { font-family: verdana; font-size: 20px;}

即设置对应标签的颜色、字体、大小、居中等。而当有的段落使用这个字体,有的段落使用那个字体怎么办呢?css这样设置

p.test1 { font-size: 20px;}p.test2 { font-size: 15px;}

在HTML代码中则这样写

<p class="test1">20px大小的字</p><p class="test2">15px大小的字</p>

所以不同属性就是为了区分相同标签用的,这相当于给标签进行了分类,在统一设计样式上更方便,同时对于我们根据属性定位我们想要内容的位置其实也是更方便了。这里要说明一下,class id这两个属性比较特殊,用的也最多,所以各自弄了一个快捷键来表示,class用.,id用#。

做爬虫不需要了解刚刚编写的css代码内容放在哪里之类的问题,也不需要了解css代码设置了什么,我们只会和HTML打交道,所以只要理解HTML中属性的作用就可以了。

如果想要更进一步了解HTML和CSS,可以到w3school网站学习。

现在你就已经具备了解析网页需要的全部HTML知识了。我们一般就是根据标签名配合属性值来定位我们想要资源的位置的,其他的都不用管。这时,我们再来看爬虫的解析代码

解析代码介绍

把前面的代码再粘贴一遍如下

import requests # 导入网页请求库from bs4 import BeautifulSoup # 导入网页解析库# 传入URLr = requests.get('https://www.csdn.net/')# 解析URLsoup = BeautifulSoup(r.text, 'html.parser')content_list = soup.find_all('div', attrs = {'class': 'title'})for content in content_list: print(content.h2.a.text)

解释一下上面代码的过程

第一步,把r.text这个网页源代码字符串传到BeautifulSoup函数中(第二个参数固定用法先不用管),得到的soup对象,可以理解成这一步是为了让这个字符串可以用一些更简单的方法,比如它可以调用find_all方法,寻找class属性是title的div标签,这样的标签有非常多,返回了一个list。第二步,对这个list进行循环,每一个元素内部寻找h2标签里的a标签,提取a标签中的文本,即我们要的标题。

可以看到上面的代码非常简洁,思路清晰,读者可以自己想一想如果要用正则表达式如何匹配这些标签,会发现代码繁琐很多,虽然它也有更快的优势。

那么我们是怎么知道要寻找什么样属性的div标签,为什么要找h2 a标签而不是其他的呢?这就要去分析网页的源代码了。而这个过程也非常简单。

chrome检查工具介绍

我们现在用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-查看网页源代码,这时就会打开一个新的页面这个页面就是这个网站的HTML源代码了,我们可以通过这个页面来看我们要的信息在哪里,但是感觉非常不方便,因为有太多无用的信息做干扰,我们无法快速掌控网页的结构。所以我们可以用另一种方式查看源代码。

用谷歌浏览器打开CSDN这个网站,找一个空白的位置右键-检查,就会弹出一个框,如下图所示

(如果没有看到这个界面,注意要切换到Element中)

这个页面最大的好处是通过折叠来让人更快探索出网页的结构。

其中的那些代码就是HTML代码,该页面的一个个标题就存在这一个个li里面。点击li前面的三角就可以展开具体的代码内容,如下图所示

可以看到文章的标题(打造一个高性能、易落地的公链开发平台)就在这个源代码之中,也就是说在我们刚刚获得的r.text字符串之中。而我们代码定位路径也一目了然了,因为每个li里面都会有一个<div class="title">而每一个div里面都会有一个h2 里面有一个a,a中包含我们要的标题名称。所以我们就用find_all找到所有这样的div标签,存储为一个list,再对list进行循环,对每一个元素提取h2 a 再提取标签中的内容。

当然我们也可以find_all最外面的li标签,再一层层往里找,都是一样的。只要找到定位信息的唯一标识(标签或者属性)就可以了。

虽然在这里看源代码可以折叠一些没用的代码,但是其实还有一些更好用的工具来辅助我们找到我们要的信息在网页源码中的位置。比如下面这个鼠标符号。

在所有代码都折叠起来的情况下,点击这个鼠标,之后再去点击网页中的元素,浏览器就会自动帮你把你点击的元素选中出来,其实你鼠标悬在一个元素上面的时候,就已经帮你定位了,如下图所示

总结

当我们要爬一个网页的时候,只需要如下流程

导入两个库,一个用于请求,一个用于网页解析请求网页,获得源代码初始化soup对象,使其可以调用更简单易用的方法用浏览器打开网页,右键-检查,使用那个鼠标定位你要找的资源的位置分析那个位置的源代码,找到合适的用于定位的标签及属性编写解析代码,获得想要的资源

现在,对于一些没有丝毫反爬措施的网站我们都可以游刃有余了。至于抓取多个字段的数据如何组织在一起、抓取多页(URL有规律的情况下)的代码如何设计,就不是爬虫知识范畴了,这是用python基础知识就可以解决的。下一系列文章就主要讲这一部分。接下来给几个当前可以练手的网站

CSDN首页除了标题之外的其他信息,比如作者名、发布的时间等,可以存储到一个以字典为元素的list里豆瓣top250的信息,会翻页的话250个电影的信息可以直接一个循环抓取下来,其实找到规律构造出10个URL即可stackoverflow 简书 伯乐在线 等等网站都可以拿来练手

如果使用BeautifulSoup的定位的过程中遇到困难,可以直接到网上搜教程,也可以等我们这个专题后面更新的BeautifulSoup详细介绍。

如果你去抓取其他网站,最好先看一下r.text是不是和网站源代码一模一样,如果不是,说明你对方服务器没有把真正的信息给你,说明他可能看出你是爬虫了(进行网页请求的时候,浏览器和requests.get都相当于带着一堆资格证去敲门,对方会检查你这些资格证,浏览器的资格证一般是可以通过的,而代码的资格证就可能不合格,因为代码的资格证可能有一些比较固定的特点,对方服务器预先设定好,资格证是这样的请求一律拒绝,因为他们一定是爬虫,这就是反爬虫机制),这时就需要懂一些反反爬措施才能获得真正的信息,反反爬方法的学习是一个积累的过程,我们后面再讲。读者如果遇到一些反爬机制,可以到网上查这个网站的爬虫,估计都能查到一些博客讲如何破解,甚至直接贴出代码。

更多Python视频、源码、资料加群725638078免费获取

转载至:爬虫基本原理

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。