我们编写网络爬虫主要目的是爬取想要的数据和通过爬虫去自动完成我们想在网站中做的一些事情。那么如何编写Python网络爬虫?遇到具有反爬,加密的网站,爬虫拿不到数据,以及登录验证等问题如何解决呢?不如一起来看看吧!

python3爬虫妹子 python中爬虫_学习

 

先来看一段简单的代码。

import requests #导入requests包
strhtml = requests.get(url) #get方式获取网页数据
print(strhtml.text)

首先是import requests来导入网络请求相关的包,然后定义一个字符串url也就是目标网页,之后我们就要用导入的requests包来请求这个网页的内容。

这里用了requests.get(url),这个get并不是拿取的那个get,而是一种关于网络请求的方法。

网络请求的方法有很多,最常见的有get,post,其它如put,delete你几乎不会见到。

requests.get(url)就是向url这个网页发送get请求(request),然后会返回一个结果,也就是这次请求的响应信息。

响应信息中分为响应头和响应内容。

响应头就是你这次访问是不是成功了,返回给你的是什么类型的数据,还有很多一些。

响应内容中就是你获得的网页源码了。

好了,这样你就算是入门Python爬虫了,但是还是有很多问题。

python3爬虫妹子 python中爬虫_学习_02

 

1. get和post请求有什么区别?

get和post的区别主要在于参数的位置,比如说有一个需要登录用户的网站,当我们点击登录之后,账号密码应该放在哪里。

get请求最直观的体现就是请求的参数就放在了URL中。比如说你百度Python这个关键字,就可以发现它的URL如下:https://www.baidu.com/s?wd=Python&rsv_spt=1

这里面的dw=Python就是参数之一了,get请求的参数用?开始,用&分隔。如果我们需要输入密码的网站用了get请求,我们的个人信息不是很容易暴露吗,所以就需要post请求了。

在post请求中,参数会放在请求体内。比如说下面是我登录W3C网站时的请求,可以看到Request Method是post方式。

python3爬虫妹子 python中爬虫_学习_03

在请求的下面还有我们发送的登录信息,里面就是加密过后的账号密码,发送给对方服务器来检验的。

python3爬虫妹子 python中爬虫_开发_04

2.为什么有些网页我爬取到了,里面却没有我想要的数据?

有时候会发现爬下来的是目标网页,但是里面我们想要的数据却没有。这个问题大多数发生在目标数据是那些列表型的网页,比如爬携程的航班信息时,爬下来的网页除了获得不了航班的信息,其他地方都可以拿到。

网页地址:https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14

如下图:

python3爬虫妹子 python中爬虫_程序员_05

这是一个很常见的问题,因为他requests.get的时候,是去get的上面那个URL地址,网页虽然是这个地址,但里面的数据却不是这个地址。那么我们应该怎么解决这个问题呢?

python3爬虫妹子 python中爬虫_python_06

那么我们应该怎么解决这个问题呢?我们只需要知道我们最开始请求的https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14这个网页中有一段js脚本,在这个网页请求到之后会去执行,而这段脚本的目的就是去请求我们要爬的航班信息。

这时候打开浏览器的控制台,推荐使用谷歌或者火狐浏览器,按F12进入浏览器控制台,然后点击NetWork。在这里我们就可以看到这个网页中发生的所有网络请求和响应了。

python3爬虫妹子 python中爬虫_学习_07

在这里面我们可以找到请求航班信息的其实是https://flights.ctrip.com/itinerary/api/12808/products这个URL。

python3爬虫妹子 python中爬虫_程序员_08

3.为什么有些网站我爬下来的内容和我真实看到的网站内容不一样?

这个的主要原因是,你的爬虫没有登录。就像我们平常浏览网页,有些信息需要登录才能访问,爬虫也是如此。

我们的平常观看网页是基于Http请求的,而Http是一种无状态的请求。它不认人,也就是说你的请求到了对方服务器那里,对方服务器不知道你到底是谁。

那么,我们登录之后为什么可以长时间继续访问这个网页呢?这是因为Http虽然是无状态的,但是对方服务器却给我们安排了身份证,也就是cookie。

在我们第一次进入这个网页时,服务器会给我们一个cookie,之后我们在这个网页上的任何请求操作,都要把cookie放进去。服务器依据cookie来辨识我们。

python3爬虫妹子 python中爬虫_程序员_09

比如知乎里面就可以找到相关的cookie。对于这类网站,我们直接从浏览器中拿到已有的cookie放进代码中使用,requests.get(url,cookies="aidnwinfawinf"),也可以让爬虫去模拟登录这个网站来拿到cookie。