Python爬虫基本原理,快速入门_python csdn 爬虫原理

# 解析URL
soup = BeautifulSoup(r.text, ‘html.parser’)
content_list = soup.find_all(‘div’, attrs = {‘class’: ‘title’})

for content in content_list:
print(content.h2.a.text)


这样就会打印出所有标题,展示一部分如下


![](https://img-blog.csdnimg.cn/img_convert/c821153b085529a40abfb770b7cc4813.png)


上述过程是一个最简单的完整爬虫流程,可以看出它的功能就是把那些标题复制粘贴到一起,免除了手动操作的繁琐。其实爬虫一般就是做这些事的,比如我们需要用链家的数据进行分析,看到链家的页面是这样的


![](https://img-blog.csdnimg.cn/img_convert/2f993a8ab2c7a8ccf7b475315b11980f.png)


我们想获取每个房子的标题、几室几厅、多少平米、朝向、装修、价格等等字段,就可以通过爬虫进行定位,自动化抓取这100页所有房子的这些字段信息。


注:如果还没有安装上面两个库的读者可以在命令行下分别运行下面两行命令完成安装



pip install requests
pip install beautifulsoup4


### 概念介绍


知道了爬虫是用来干什么的之后,我们来介绍一些最常见到的概念


1.URL


URL中文称为统一资源定位符,其实可以理解成网页的链接,比如上面的`https://www.csdn.net/`就是一个URL。


但是更广义的URL不只是我们常看到的网页资源链接,而是资源在网页中的定位标识。我们通常说的网页是一个资源,网页中加载的每一张图片也是一个资源,它们在互联网中也有唯一的定位URL。比如我们从CSDN网页上随便找一张图片


![](https://img-blog.csdnimg.cn/img_convert/2dcdb2b1d2ff67d8046301f82d1e4e07.png)


这个链接`https://csdnimg.cn/feed/20180330/49f4cd810ad4606e3c45ed9edb16a8b8.jpg`就是这个图片资源的定位符,将这个链接输入浏览器中就会显示出这张图片,所以说这张图片也对应一个URL。


不过知道这么回事就好,我们通常所说的传入URL指的就是把网页的链接传进去。上面代码中



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


就是在将URL传入请求函数。


2.网页请求


说到网页请求,就有必要讲一下我们平常浏览网页时,信息交互的模式大概是什么样的。我们平常用浏览器浏览网页的时候,鼠标点了一个链接,比如你现在点击[这里]( ),其实浏览器帮你向这个网页发送了请求(request),维护网页的服务器(可以理解成云端的一台电脑,在维护这CSDN上的各个网页)收到了这个请求,判定这个请求是有效的,于是返回了一些响应信息(response)到浏览器,浏览器将这些信息进行渲染(可以理解成组合编译展示),就是你看到的网页的样子了。


而现在我们要用代码来模拟这一过程。上面的`requests.get`就是让代码帮你向这个网页发送了这个请求,如果请求被判定为有效,网页的服务器也会把信息传送给你,传送回来的这些信息就被赋值到变量`r`之中。所以这个变量`r`里就包含有我们想要的信息了,也包括那些我们想要提取的标题。


我们可以`print(r.text)`看一下里面有什么东西


![](https://img-blog.csdnimg.cn/img_convert/5f0666240418bbc2674b3b844dcb699b.png)


我们再看一下网页的源代码(如何看懂这个源码,以及这个源码怎么查看下一节HTML会详细讲到)


![](https://img-blog.csdnimg.cn/img_convert/c6977b316329331a5047831db30128a7.png)


源代码和`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的文件,在里面写下如下代码



爬虫基本原理

HTML介绍

第一段

第二段


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


![](https://img-blog.csdnimg.cn/img_convert/70f3a411bbf8963e39f10cb26f80ecd8.png)


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


接下来,我们来看一下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代码中则这样写



20px大小的字

15px大小的字


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


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


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


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


### 解析代码介绍


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





现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。



分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

![](https://img-blog.csdnimg.cn/img_convert/21b2604bd33c4b6713f686ddd3fe5aff.png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值