设为首页 加入收藏

TOP

python爬虫基础(1)
2019-08-15 00:09:36 】 浏览:38
Tags:python 爬虫 基础
  • 请求头常见参数

在http协议中,向服务器发送一个请求,数据分为三个部分,第一个是把数据放在url中,第二个是把数据放在body中(在post请
求中),第三个就是把数据放在header中。这里介绍在网络爬虫中经常会用到的一些请求头参数:
1. User-Agent:浏览器名称,这个在网络爬虫中经常会被使用到。请求一个两页的时候,服务器通过这个参数就可以知道这个请求 是由哪种览器发送的。如果我们是通过爬虫发送请求,那么我们的User-Agent就是 Python,这对于那些有反爬虫机制的网站来 说,可以轻易的判断你这个请求是爬虫,因此我们要经常设贸这个值力一些刻览器的值,来伪装我们的爬虫
2. Referer:表明当的这个请求是从哪个ur1过来的,这个一般也可以用来做反爬虫技术,如果不是从指定页面过来的,那么就不 做相关的响应
3. Cookie:http协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人·因此这 时候就用 cookie来做标识,一般如果想要做登录后才能访问的网站,那么就需要发送cookie信息了
  • 常见响应状态码

1.200:请求正常,服务器正常的返回数据

2.301:永久重定问。比加在访问w.jangdong.com的时候会重定向到w.Jd.cms

3.302:临时重定向比如在访问一个需要置录的页面的时候,而此时没有登录,那么就会重定问到登录页面

4.400:请求的w1在服务器上找不到。换句话说就是请求ur1错误

5.403:服务器托缩访问,权限不够

6.500:服务器内部错误。可能是服务器出现bug了

 

  • urllib库 urllib库是 Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的 数据
  • urlopen函数:

在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等方法

 

  • urlretrieve函数
这个的数可以方便的将网页上的一个文件保存到本地。以下代码可以菲常方便的将百度的百页下载到本地:
from urllsb import request
request.urlretrieve('http://www.baiducom/,'baidu.html')
  • urlencode函数:

用决览器发送请求的时候,如果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参数进行解码。

 

  • ProxyHandler处理器(代理设置)

很多网站会检测某一段时间某个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())

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python 递归\for循环_斐波那契数列 下一篇python爬视频实例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目