1. 首页
  2. Python

如何学习爬虫及需要掌握的知识(上)分析及发送请求

学习Python爬虫我们要学习哪些知识呢?

经常看到有人去学习爬虫,然后到处找教程,到处去问要学些什么内容。

我也是从零开始入门爬虫的,下面说说我对python爬虫学习的一些见解。

以下内容适用于初学者。

我们先用简单的豆瓣电影HTML网页来做爬虫入门演示,后面有时间时,再写一下进阶的内容。

首先我们先看一下爬虫工作的简要过程:

1. 确定我们需要采集的网页

2. 向服务器发送HTTP请求

3. 请求返回了数据包

4. 解析返回的网页或数据

5. 提取需要的数据

6. 进行数据清洗并入库

那我们就一步一步的看下我们都需要些什么知识:

一、确定我们需要采集的网页

假如我们需要采集豆瓣电影中的正在热映电影的名称及分数,对应的网址为:movie.douban.com,我们可以看到这里没有“更多”的按钮,只是通过左右的小箭头可以翻6页。所以我们一般可以确定这就是我们需要采集的网页,那我们就要对这个网页的请求进行分析。

如何学习爬虫及需要掌握的知识(上)分析及发送请求

二、向服务器发送HTTP请求,

1. 首先我们要了解HTTP协议:

在这里我不想去分析HTTP协议,这个太复杂,随便一末HTTP协议的书都会有几百页的厚度,我们不需要非常的深入的学习,只需要简单的了解。

HTTP协议说白了,就是数据交换,就是拿着一些东西给服务器,然后从服务器那边拿回自己需要的内容。

拿什么给服务器呢?

url :movie.douban.com/ (必须)请求的具体地址。

headers,:{‘user-agent’:’python3′,’reffer’:”….} (可能需要)请求数据的文件头,里面有UA之类的数据。

cookies,:{‘__utma’:’akafjaskfaslfaslf’…..} (可能需要)请求需要的cookies验证,headers包含cookies,但因cookies在里面的重要性,所以一般会单独拿出来。

data: (POST请求一般需要)使用POST时发送的数据,可能是一些附加参数,也可能是一个文件。

如何将这些数据发送给服务器呢? 那就需要通过两种方法 GET或POST进行发送,当然还有PUT、options、head、delete方法,但这些我们一般不会去用的,可以放在一边,在有兴趣时可以再去看,不会影响我们的学习。只要大体知道每样都代表什么就OK。

2、那我们用什么去查看及分析这些请求呢?

我们可以用CHROME的‘开发者工具’,也可以用firefox浏览器的firbug,也可以使用第三方的fiddler或charles,如果只是爬取网页数据个人比较喜欢用CHROME,如果要爬取APP的数据那就要用到FIDDLER或charles了。

我们就简要说下CHROME的开发者工具:

在开发者工具的NETWORK标签下,打开一个网页后,你会发现有很多的请求,这些请求返回的页面给过浏览器的渲染构成了我们看到了五彩的HTML页面。

如何学习爬虫及需要掌握的知识(上)分析及发送请求

这里面的每个请求都会向服务器发送一部分数据,服务器可能会返回一些对应的数据。

我们先看第一个请求movie.douban.com 返回数据预览:

如何学习爬虫及需要掌握的知识(上)分析及发送请求

这个请求里面,我们首先需要在preview里面查看一下,这里是否包含我们需要的数据?如果这个包里有我们需要的数据那我们就对这个包进行分析,如果没有我们就继续查看其他的请求里面是否有我们需要的数据,我们只针对有需要数据的请求进行分析。

很明显这里有我们想要爬取的电影信息,像电影的名字、电影的评分都在里面,那我们就分析这个请求。

我们点击左边的movie.douban.com的请求可以看到下面的请求信息。

如何学习爬虫及需要掌握的知识(上)分析及发送请求

在上面的请求中我们需要看的是 GENGRAL及 request headers

在general中我们可以看到

requestURL
这个就是我们请求的URL地址

requestMethod:请求的方法
这里是GET,

UA:就是常用的火狐谷歌或苹果浏览器

Cookies里面有这个请求发送时提交的cookies信息(这个不一定是必须的,我们下面的工作可以先不考虑这个cookies)

3、发送请求:

当我们知道了发送请求的URL及方法时我们就可以使用工具进行发送请求测试了。

我们使用什么来发送请求呢?常用的就是下面两种:

(1) urllib python原生库功能强大,操作起来不算很复杂

(2)requests第三方的请求库,易于使用,特别对于初学者更人性化一点吧,当然有人说urllib会更快一些,但对日常来说这个已经足够了。

那我们就模拟一下最简单的请求发送:

我们先不带headers及cookies看是否能够成功返回:

import requests
res = requests.get('http://movie.douban.com/')  #请求豆瓣的网页,将返回结果返回给res 
res.encoding = 'utf-8' #解码方式使用utf-8
print(res.text)  #看下请求返回的数据内容是什么

在我们查看打印出请求返回的文本信息时,找到了我们在网页中看到的电影信息(这里只截取一小部分内容):

    <li class="ui-slide-item"  data-title="奇迹男孩 Wonder" data-release="2017" data-rate="8.6" data-star="45" data-trailer="https://movie.douban.com/subject/26787574/trailer" data-ticket="https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F604719%3F_v_%3Dyes%26merCode%3D1000011" data-duration="114分钟(中国大陆)" data-region="美国" data-director="斯蒂芬·卓博斯基" data-actors="雅各布·特伦布莱 / 朱莉娅·罗伯茨 / 伊扎贝拉·维多维奇" data-intro="" data-enough="true" data-rater="75117">
                        <ul class="">
                            <li class="poster">
                                <a onclick="moreurl(this, {from:'mv_a_pst'})" href="https://movie.douban.com/subject/26787574/?from=showing">
                                    <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2507709428.jpg" alt="奇迹男孩" rel="nofollow" class="" />
                                </a>
                            </li>
                            <li class="title">
                                <a onclick="moreurl(this, {from:'mv_a_tl'})" href="https://movie.douban.com/subject/26787574/?from=showing" class="">奇迹男孩</a>
                            </li>
                            <li class="rating">
                                        <span class="rating-star allstar45"></span><span class="subject-rate">8.6</span>
                            </li>
                                <li class="ticket_btn"><span><a onclick="moreurl(this, {from:'mv_b_tc'})" href="https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F604719%3F_v_%3Dyes%26merCode%3D1000011" target="_blank">选座购票</a></span></li>
                        </ul>
                        
                        
                   

这时我们发现,我们的请求没有问题,结果也能够正常返回,我们也就不再需要对headers及cookies进行分析了。

我们可以直接进入下一步:解析网页并获取数据。

总结:请求分析我们需要掌握的知识至少需要有 :

chome开发者工具、firebug或fiddler其中的一种。

python的请求库中的一种,建议新手用requests

本节先介绍到这里,下节将介绍如何解析网页获取数据!

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/203877.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code