python爬虫小白入门教科书_小白入门Python爬虫指南

首先所谓爬虫,就是把你上网看到的网页的信息抓取下来,如果你不嫌麻烦,你可以手工一页一页的翻网页,也能上面的信息给一点点拷贝下来,所以爬虫只是把你手工上网浏览和拷贝信息的动作自动化了。也就是说爬虫不是万能的 ,不是所有的信息都能爬下来,爬虫能抓取的信息是首先是你能在在网页上能找到的信息。

所以要入门爬虫,首先要理解用浏览器打开网页是咋回事,要完完全理解浏览器如何打开网页的知识,可能要看N个大部头书才能理解,不过我们只是入门Python爬虫,对浏览器访问网页的有个基本概念就可以了,完全不需要去把TCP/IP,HTTP,HTML/CSS/JS大部头书都啃完。

浏览器是如何工作的?

要了解浏览器是如何工作的,先安装一个Python 3,然后下载一个Chrome或者360极速浏览器或者微软Edge浏览器。

打开编辑器,敲一下面一段HTML代码:

我的写一个网页

你好,世界

将上面的HTML代码保存成index.html到电脑上,比如保存到D://mysite/下,然后在命令行模式下进入这个目录:

cd D://mysite/

然后在这个目录下,敲下面的命令:

python -m http.server

上面这段话的意思,是在mysite目录下启动一个最简单的HTTP服务器,如果启动成功可以看到下面的结果, 这表示Python启动了一个简单的HTTP服务器,你可以使用http://0.0.0.0:8000/访问他:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

我们使用Chrome浏览器(360极速或者Edge浏览器也可以)打开下面的链接试试:

然后你可以在Chrome在可以看到下面的页面:

你可以看到,这个网页展示的就是我们刚才写的index.html的内容,当我们在浏览器上敲入

实际上,就是浏览器向我们用python命令启动的HTTP发了一个请求,让它把Index.html的内容返回给浏览器,然后浏览器再展示出来给我们看。

那么浏览器是如何发送请求的,这个请求是什么样的内容,你可以打开浏览器的开发者工具,选择到Network,如下图:

再刷新下页面,你可以看到Network那一栏,浏览重新发一个请求给HTTP服务器:

然后你点这个请求,可以看到这个请求的详情:

当我们的浏览器向HTTP服务器请求返回Index.html时,他把请求的信息都放在Request Headers里,User-Agent表示我的什么样的浏览器,Accept表示我接受什么样的格式文件。

当HTTP服务器接受这样的一个请求,则会根据请求的内容,查找该请求访问的资源,在这个例子里是index.html,则返回该资源的内容。

然后浏览器根据将该资源(index.html)的内容解析展示出来,现在我们再来改来在index.html里增加一张图片:

我的写一个网页

你好,世界

然后把pic.png这个图片保存到mysite文件里,刷新下浏览器,可以看到这样的页面:

我们再打开开发者工具,查看Network部分,你可以看到浏览器先发送请求给HTTP服务器,请求HTTP服务器返回文件(资源)index.html, 然后浏览器解析index.html文件的时候发现里面我们新增加一个图片代码:

根据这个代码,浏览器器又发起一个请求给HTTP服务器,请求HTTP服务器,再将pic.png返回给它,然后浏览器最终将结果都显示到页面上,就得到我们看到的结果。

但是只有文字和图片会显得不好看,我们很多时候,需要对文字和图片进行排版,让页面显得整洁美观,所以有人发明了CSS文件,专门用来对HTML里各个元素进行排版。

比如我们增加一个style.css文件放在mysite目录下,并且给我们的index.html两个元素h1和img都加一个名字。

我的写一个网页

你好,世界

然后写一个style.css文件,给h1, img加一些样式和排版,比如给h1,img都加一个红色和蓝色边框,我们可以增加几行CSS代码:

.word{

border: 1px solid #ff0000;

}

.girl{

border:2px solid #0000ff;

}

然后我们index.html里加一行:

引入style.css, 这个句html代码就是告诉浏览器,index.html的里面的元素的如何排版和展示基于style.css里的信息排版。

我的写一个网页

你好,世界

然后刷新页面:

然后继续查看开发者工具的Network一栏:

可以看到浏览器先向HTTP服务器请求访问index.html, 然后解析index.html,发现html内容还额外需要一图片pic.png,和一个排版格式文件style.css, 然后发起另外两个请求,然后最终将页面展示出来。

但是只有文字和图片,加上一个描述他们的排版样式的CSS文件,好像还是不够动态,我们还是希望网页有些互动,比如我们在网页上点下图片,会切换到另一个图片,这个就是javascript被发明的原因,发明javascript,就是为了让浏览器能根据我们写的javascript代码对页面做一些互动,比如点了某个HTML元素,改变自己或者其他HTML元素,或者向HTTP服务器再发起一个资源请求等等。

我们再增加一个javascript文件,当点击图片的时候,会加载到另一个图片:

我们新建一个javascript文件,文件名叫img.js, 代码很简单,就是当你点击图片的时候,将图片换成pic2.jpeg

如下:

let _girl = document.getElementsByClassName("girl");

_girl[0].addEventListener("click",function(){

_girl[0].src="pic2.jpeg"

}) ;

我们将img.js和pic2.jpeg保存到mysite下,然后在index.html增加一行代码:

我的写一个网页

你好,世界

现在我们mysite目录下,有5个文件:

现在刷新的页面,一开始是这样:

可以看到,浏览器先向服务器发请求,要求返回index.html的内容,拿到index.html内容后,然后解析index.html之后,发现还需要额外的三个资源,pic.png, style.css,img.js,然后又发起三个请求。

可以看到,当你点击图片的时候,浏览器会按照img.js的代码的要求,将图片从pic.png换成pic2.jpeg, 所以浏览器就又向服务器新增一个网络请求,让服务器返回pic2.jpeg,当pic2.jpeg返回后,浏览器就把新图片换上。

网页除了可以展示文字,图片,并且可以增加一些互动外,网页之间还可以互相跳转,所以我们还可以在index.html里增加一个新的页面链接,如下:

我的写一个网页

你好,世界

这是一个新链接

然后在mysite下,新建议一个new.html:

我的写二个网页

你好,新世界

然后点击链接的时候,页面会跳转到新页面,可以继续在network栏,查看浏览器是如何发请求给服务器的(记得点选上Preseve log,不然network不会显示旧页面的请求日志):

可以看到,浏览器先向服务器请求了index.html,然后解析index.html的内容,根据内容要求又发起三个资源请求(pic.png,style.css,img.js),当点击新链接的时候,浏览器又发起一个新请求让服务器返回new.html的内容.

最后,总结下,浏览器打开一个网页的时候,实际上是向一个服务要求返回这个资源的html内容,而请求的详情则放在这个请求的headers,然后根据Html的内容,向服务器申请需要的其他的资源,最重要的大致有以下几种资源(文件):HTML文件,描述页面上会展示哪些元素(信息),包括文字,表格,图片,视频,按钮等等

CSS文件,用来描述,文字,表格图片如何排版

JAVASCRIPT文件,用来增加网页的一些互动,比如点了某个按钮图片,改变自己其他的HTML的元素,或者向服务器额外要求返回一个新的信息或者资源

图片,视频,字体等等各种资源文件

而浏览器则最终整合这些资源信息渲染成我们看到的网页。

所以,你可以用开发者工具,看下我们浏览器例如是如何百度服务器发起请求,最终展示百度的页面的,如下图:

你可以看到打开百度,百度先反馈了第一HTML,然后接着,根据Html内容,再发起很多个请求,请求响应的各种资源,图片,JS,CSS等等。

我们如何用Python来爬取网页信息?

上面,我们用很长的篇幅来简单的解释浏览器是工作,那所谓爬虫,就是要模拟人类用浏览器去访问服务器,然后解析服务器的返回,将你想要的信息提炼出来并保存,这就是所谓的爬虫。

所以,写爬虫的第一件事,就是弄清楚浏览器的上面你关注的信息,是浏览器是如何发起请求,从服务器获得这些信息的,所以用打开浏览器开发者工具,去分析一个网站的的请求信息,是写爬虫的基本功。

比如我想爬下猫眼电影,那么先打开浏览器,看看浏览器的请求是如何发送的:

可以看到,浏览器发起的链接和对应的headers.

那我们就需要用python来模拟,python提供很简单的库requests来模拟,它的调用方法很简单,就是:

_session = requests.Session()

_result =_session.get(url,headers={})

上面两行代码,相当于浏览器给猫眼发起请求,然后_result则是猫眼返回的Html内容,我们照着浏览器发起的headers,也一样给猫眼服务器发起请求:

import requests

_session = requests.Session()

_result= _session.get("https://maoyan.com/?channel=touch_group",

headers={

'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'Host':'maoyan.com'

}

)

上面的代码猫眼返回的html的内容就保存在_result这个对象的text属性里:

然后我们要从猫眼返回的HTML里找到我们想要的信息,比如我们想从html里找到即将上映的电影有哪些,在浏览器上右键页面,点击审查元素,我们可以看到我们关注的即将上映的影片的HTML元素的信息,在猫眼上就是看到就是,有一个movie-list下面有一个个movie-item,就是要上映的一个个影片。

从html里提取信息,可以使用beautifulsoup4, 也可以使用requests-html,这边以requests-html为例子:

from requests_html import HTML

_html = HTML(html=_result.text)

_movie_lst =_html.find(".movie-list .movie-item")

其中_html.find(".movie-list .movie-item")的意思,就是查找className为movie-list下的所有className为movie-item的HTML元素,find里面跟着的是一个简单CSS selector串,可以花个半个小时了解下。CSS Ñ¡ÔñÆ÷²Î¿¼ÊÖ²á​www.w3school.com.cn

然后我们可以把每个电影的海报图片地址和电影名字,打印出来,再在网页上用“审查元素”功能,看下海报的名字和图片链接在哪?

可以看到,每个"move-item"下面有一个img元素,它的className是"movie-poster-img",它的alt属性是电影名字,src属性就是电影海报图片的地址。所以我们可以简单的下面代码就可以找到每个电影的名字和海报图片地址:

for _one_movie in _movie_lst:

_one_movie_img =_one_movie.find(".movie-poster-img",first=True)

print("电影名字")

print(_one_movie_img.attrs['alt'])

print("电影海报")

print(_one_movie_img.attrs['data-src'])

然后我们就得到了我们想要的结果:

爬虫入门总结

所谓爬虫,就是用python来模拟浏览器访问网页,并将网页内容解析提取其中想要的信息保存下来,所以,第一步,要学会分析浏览器访问网页,是如何访问的,你关心的信息在哪里,是在html,还是隐藏在js,或者是藏在一些例如REST或者WEB SERVICE的返回的结果了,所以,首先要学会用浏览器,去分析浏览器是如何访问的,找出你关注的信息,在那个浏览器请求里。

知道这些信息,你就可以很轻松的用requests来模拟浏览器的操作并获得返回的结果,这时候,可以用requests-html等库,解析提出你关心的信息,再保存成文件或者excel或者其他你要保存的格式。

进阶

上面内容都是最简单最基本的Python入门,但是已足以应付日常大部分的爬取任务,但是还不满足的同学,想抓取更大规模数据的同学,可以去了解下scrapy+Scrapy Cloud - The Most Advanced Platform for Running Web Crawlers上面内容都是最简单最基本的Python入门,但是已足以应付日常大部分的爬取任务,但是还不满足的同学,想抓取更大规模数据的同学,可以去了解下scrapy+Crawlera, 通过分布式和代理去爬取更多更大型的数据。https://scrapinghub.com/scrapy-cloud​scrapinghub.com

App的信息的爬取

除了网页外,现在有很多信息是在App内部,没有提供网页版,这个如何用Python如何分析和爬取信息,又是另个话题,感兴趣的同学可以在本回答上留言,如果关注的人多的话,我会单独再一篇文章来解释。

最后,各位看官,点个赞再走呗:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值