在htp协议中,向服务器发送一个请求,数据分为三岛分,第一个是把数据放在ur中,第二个是把数据放在body中(在post请 求中),第三个就是把数据放在head中。这里介绍在网络爬虫中经常会用到的一些请求头参数:
1. User-Agent:浏览器名称,这个在网络爬虫中经常会被使用到。请求一个两页的时候,服务器通过这个参数就可以知道这个请求 是由哪种览器发送的。如果我们是通过爬虫发送请求,那么我们的User-4gent就是 Python,这对于那些有反爬虫机制的网站来 说,可以轻易的判断你这个请求是爬虫,因此我们要经常设贸这个值力一些刻览器的值,来伪装我们的爬虫
2. Referer:表明当的这个请求是从哪个ur1过来的,这个一般也可以用来做反爬虫技术,如果不是从指定页面过来的,那么就不 做相关的响应
3. Cookie:htp协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人·因此这 时候就用 cookie来做标识,一般如果想要做登录后才能访问的网站,那么就需要发送coke信息了
1.200:请求正常,服务器正常的返回数据
2.301:永久重定问。比加在访问w.jangdong.com的时候会重定向到w.Jd.cms
3.302:临时重定向比如在访问一个需要置录的页面的时候,而此时没有登录,那么就会重定问到登录页面
4.400:请求的w1在服务器上找不到。换句话说就是请求ur1错误
5.403:服务器托缩访问,权限不够
6.500:服务器内部错误。可能是服务器出现bug了
在Phon3的urllib库中,所有和网络请求相关的方法,都楼集到urllib, request模块下面了,以先来看下 urlopen基本的 使用:
from urllib inport request resp.reqvest.urlopen("http://www.baidu.com") print(resp. reado)
实际上,使用浏览器访问百度,右键查看源代码,你会发现,跟我们刚才打印出来的数据是一模一样的。也就是说,上面的三行代码 就已经帮我们把百度的百页的全部代码爬下来了。一个基本的url请求对应的 python代码真的非常简单 以下对 urlopen函数的进行详细讲解:
1.url:请求的url
2.data:请求的dta,如果设网了这个值,那么将变成post请求
3.返回值:返回值是一个对象,这个对象是一个类文件句柄对象 有read(sze)、 readline、readine以及 getcode等方法
这个的数可以方便的将网页上的一个文件保存到本地。以下代码可以菲常方便的将百度的百页下载到本地:
from urllsb import request request.urlretrieve(‘http://www.baiducom/,‘baidu.html‘)
用决览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码。而如果使用代码发送请 求,那么就必须手动的进行编码,这时候就应该使用urlencode来实现, urlencode可把字典数据转换为uRL编码的数据 示例代码如下:
from urllib inport parse data = {“name”:“爬虫”‘, “greet”:"he1 lo word”, “age”:100} qs. = parse.urlencode (data) print(qs)
parse_qs函数 可以将经过编码后的u参数进行解码。
很多网站会检测某一段时间某个iP的访问次数(通过凌量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个iP的访问 所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算iP被禁止,依然可以换个iP续爬取 urllib中通过 ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理: 这个是没有使用代理的
from urllib import request # 这个是没有使用代理的 # resp = request.urlopen("http://baidu.com") # print(resq.read().decode("utf-8")) # 这个是使用代理的 handler = request.ProxyHander({"http":"218.66.82:32512"}) opener = request.build_opener(handler) req = request.Request("http://www.baidu.com") resp = opener.open(req) print(resp.read())
原文:https://www.cnblogs.com/toling/p/11300207.html