博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
requests爬虫遇到404怎么办_爬虫入门;requests 心慌得初夏
阅读量:4955 次
发布时间:2019-06-12

本文共 4574 字,大约阅读时间需要 15 分钟。

一.爬虫简介

1.什么是爬虫

爬虫是一个模拟浏览器向网站发送请求,获取资源并分析获取有用数据的程序。

2.爬虫的基本流程

0cbef4409da6a8fa01ccd91c31d84d97.png

#1、发起请求

使用http库向目标站点发起请求,即发送一个Request

Request包含:请求头、请求体等#2、获取响应内容

如果服务器能正常响应,则会得到一个Response

Response包含:html,json,图片,视频等#3、解析内容

解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等

解析json数据:json模块

解析二进制数据:以b的方式写入文件#4、保存数据

数据库

文件

二.requests

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#1、请求方式:

常用的请求方式:GET,POST

其他请求方式:HEAD,PUT,DELETE,OPTHONS

```

ps:用浏览器演示get与post的区别,(用登录演示post)

post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k3=zzz

post请求的参数放在请求体内:

可用浏览器查看,存放于form data内

get请求的参数直接放在url后

```#2、请求url

url全称统一资源定位符,如一个网页文档,一张图片

一个视频等都可以用url唯一来确定

```

url编码

https://www.baidu.com/s?wd=图片

图片会被编码(看示例代码)

```

```

网页的加载过程是:

加载一个网页,通常都是先加载document文档,

在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求

```#3、请求头

User-agent:请求头中如果没有user-agent客户端配置,

服务端可能将你当做一个非法用户

host

cookies:cookie用来保存登录信息

```

一般做爬虫都会加上请求头

```#4、请求体

如果是get方式,请求体没有内容

如果是post方式,请求体是format data

```

ps:1、登录窗口,文件上传等,信息都会被附加到请求体内2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post

```

View Code

一.requests介绍

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1.介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)2.注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求3.各种请求方式:常用的就是requests.get()和requests.post()>>> importrequests>>> r = requests.get('https://api.github.com/events')>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})>>> r = requests.delete('http://httpbin.org/delete')>>> r = requests.head('http://httpbin.org/get')>>> r = requests.options('http://httpbin.org/get')#建议在正式学习requests前,先熟悉下HTTP协议

http://www.cnblogs.com/linhaifeng/p/6266327.html

requests介绍

二.requests使用

前提:下载模块

pip3 install requests

1.基于GET请求的使用

1.基本使用

#1.导入模块

importrequests#2.发送请求:requests.get('请求地址',其他参数可省略)

response=requests.get('http://dig.chouti.com/')#3.获取响应:请求对象.text

print(response.text)

2.带参数的GET请求->headers使用

#1.headers作用:主要是将自身伪装成浏览器,一般发送请求的时候都会带着。常见的headers参数和作用如下

Host

Referer#大型网站通常都会根据该参数判断请求的来源

User-Agent #客户端

Cookie #Cookie信息虽然包含在请求头里,但requests模块有单独的参数来处理headers={}内就不要放它了

341993896db6d6bfa85fdd10b776933b.png

#2.示例:

importrequests#自己定制headers

headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36',

}

respone=requests.get('https://www.zhihu.com/explore', headers=headers)print(respone.status_code) #200

3.带参数的GET请求->params使用

第一种使用方式手动拼接(不常用,还需自己手动转码)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importrequests#如果查询关键词是中文或者有其他特殊符号,则不得不进行url编码

from urllib.parse importurlencode

wd='egon老师'encode_res=urlencode({'k':wd},encoding='utf-8')

keyword=encode_res.split('=')[1]print(keyword)#然后拼接成url

url='https://www.baidu.com/s?wd=%s&pn=1' %keyword

response=requests.get(url,

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',

})

res1=response.text

手动拼接

第二种借用params(常用,会自动转码)

importrequests

wd='egon老师'pn=1response=requests.get('https://www.baidu.com/s',

params={'wd':wd, 'pn':pn},

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',}

)

res2=response.text#验证结果,打开a.html与b.html页面内容一样

with open('a.html','w',encoding='utf-8') as f:

f.write(res1)

with open('b.html', 'w', encoding='utf-8') as f:

f.write(res2)

4.带参数的GET请求->cookies使用

#登录github,然后从浏览器中获取cookies,以后就可以直接拿着cookie登录了,无需输入用户名密码#用户名:egonlin 邮箱378533872@qq.com 密码lhf@123

importrequests

Cookies={ 'user_session':'wGMHFJKgDcmRIVvcA14_Wrt_3xaUyJNsBnPbYzEL6L0bHcfc',}

response=requests.get('https://github.com/settings/emails',cookies=Cookies) #github对请求头没有什么限制,我们无需定制user-agent,对于其他网站可能还需要定制

print('378533872@qq.com' in response.text) #True

2.基于POST请求使用

介绍

#GET请求

HTTP默认的请求方法就是GET*没有请求体*数据必须在1K之内!*GET请求数据会暴露在浏览器的地址栏中

GET请求常用的操作:1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求2. 点击页面上的超链接也一定是GET请求3. 提交表单时,表单默认使用GET请求,但可以设置为POST#POST请求

(1). 数据不会出现在地址栏中

(2). 数据的大小没有上限

(3). 有请求体

(4). 请求体中如果存在中文,会使用URL编码!#!!!requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据

示例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#模拟登录某网站

importrequests

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36','Referer': 'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2F',

}

res= requests.post('http://www.aa7a.cn/user.php',

headers=headers,

data={'username': '616564099@qq.com','password': 'lqz123','captcha': 'pnz4','remember': 1,'ref': 'http://www.aa7a.cn/','act': 'act_login'}

)#如果登录成功,cookie会存在于res对象中

cookie=res.cookies.get_dict()#向首页发送get请求

res=requests.get('http://www.aa7a.cn/',headers=headers,

cookies=cookie,

)if '616564099@qq.com' inres.text:print("登录成功")else:print("没有登录")

模拟登陆华华手机

你可能感兴趣的文章
js 基础拓展
查看>>
SpringBoot访问html访问不了的问题
查看>>
{width=200px;height=300px;overflow:hidden}
查看>>
C#生成随机数
查看>>
CSS基础学习 20.CSS媒体查询
查看>>
2019春季第十一周作业
查看>>
洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
查看>>
iOS CoreData介绍和使用(以及一些注意事项)
查看>>
OS笔记047代理传值和block传值
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
coco2dx服务器简单例子
查看>>
Java回顾之多线程
查看>>
sqlite
查看>>
机电行业如何进行信息化建设
查看>>
Windows Azure Platform Introduction (4) Windows Azure架构
查看>>
【转】chrome developer tool 调试技巧
查看>>
mahout运行测试与kmeans算法解析
查看>>
互相给一巴掌器
查看>>
Android SDK环境变量配置
查看>>
VM10虚拟机安装图解
查看>>