当前位置:网站首页>利用requests库爬取网页获取数据
利用requests库爬取网页获取数据
2022-06-10 09:24:00 【芝麻芋圆】
一、get请求
测试小例子:
# 获取一个get请求,用get的方式直接访问网址
url = 'https://movie.douban.com/top250'
response = requests.get(url)
response.encoding = 'utf-8' # 出现乱码使用,对获取到的网页源码进行一个utf-8解码
print (response.text) # 获取网页的HTML字符串,该方式往往会出现乱码
print (response.status_code) # 返回状态码
运行后的结果:
返回状态418,说明被发现是爬虫了,无法正常响应,因此无法成功获取该网页的HTML字符串
解决办法:
对自己进行伪装,不让发现自己是一个爬虫,而是一个浏览器,
一般加上headers信息User-Agent并发送(让豆瓣知道我们不是爬虫,而是一个这种类型的浏览器)
若想要伪装更多,可以加上更多的键值对,例如:data、method、host、cookie等等
# 获取一个get请求,用get的方式直接访问网址
url = 'https://movie.douban.com/top250'
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
response = requests.get(url,headers=header)
response.encoding = 'utf-8' # 出现乱码使用,对获取到的网页源码进行一个utf-8解码
print (response.status_code) #返回状态码
print (response.text) # 获取网页的HTML字符串,该方式往往会出现乱码
运行后结果:
状态码返回200,代表可以正常响应,也返回了该网页的HTML字符串
小知识:user-agent用户信息
有些网站有防御机制,抵御爬虫的访问,因此需要进行伪装

二、post请求
一个专门测试的网址:httpbin.org(请求和响应的一个服务,当你向它发送请求的时候,它会告诉你给你一些什么样的响应,可以通过这个方式可以测试一下你的请求是不是得到了你预期的响应,可以测试http)
例如测试post请求



进行代码测试:
# 获取一个post请求
respones=requests.post('http://httpbin.org/post')
print (respones.text)
运行后结果:
三、超时处理
在网络爬虫中会出现多种情况,例如链接是死链接或者链接的服务器有排斥的情况可能无法爬虫,所以需要监测
# 超时处理,在网络爬虫中会出现多种情况,例如链接是死链接或者链接的服务器有排斥的情况可能无法爬虫,所以有必要进行监测
try:
responses=requests.get('http://httpbin.org/get',timeout=0.01) # 超时的时间自己设置
print (responses.text)
except Exception as e:
print 'timeout'
运行后结果:
四、响应
responses属性:
responses=requests.get('http://www.baidu.com')
print (responses.status_code) # 返回状态码,例如200(表示正常响应),418(表示被发现爬虫了)
print (responses.headers) # 返回响应头,获取头部信息
print (responses.cookies)
print (responses.url)
运行后结果:
五、伪装
不让发现自己是一个爬虫,而是一个浏览器(与上文的get请求报错的解决方法一样)
代码:
# 伪装,不让发现自己是一个爬虫,而是一个浏览器
url='http://www.douban.com' # 不能直接访问,应对请求对象进行封装
#url='http://httpbin.org/post'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'}
data={'name':'ruby','age':22} # 随意发送的data信息
respones=requests.post(url,headers=headers,data=data) # post请求
print (respones.text)
运行结果:
边栏推荐
猜你喜欢

某相机通信协议校验CRC程序

分享|数字孪生交通应用(附PDF)

Redis configuration optimization

Level 18 of leetcode Langya list - sum of two numbers (lookup table method)

LeetCode琅琊榜第十九层-有效的括号

printk学习之(二):调试

How to Understand Your Data With Descriptive Statistics

Linear Regression

谈谈2022年数字化转型的趋势

How to Understand Your Data With Visualization
随机推荐
ES6新特性class类
Compiler-pl/0 language compiler function extension
Reference counting and smart pointer for VTK learning
从零到一,一站式解决Linux环境下的MySQL(下载篇)
Leetcode Langya list level 20 - binary sum
必应(Bing)的站内搜索 site:<域名> <搜索内容>
Texture mapping for VTK learning
How to Understand Your Data With Descriptive Statistics
printk学习之(二):调试
工业数字化转型中的数据治理
scanpy下载数据慢或者失败问题解决
printk学习之(三):你还在用printk吗?
分享|数字孪生交通应用(附PDF)
高考---人生的转折点
Linear Regression
printk学习之(一):基本原理
Deploy MySQL based on statefulset in kubernetes (Part 2)
Latex basic grammar notes
The file is shown in the figure above. How to open a database file with Navicat
Vscode markdown all in One Keyboard Shortcut