Python爬虫之Requests库简单实战

实战1:京东商品页面的爬取

1.寻找目标网页(不一定非用跟笔者一样的)

该网址为https://item.jd.com/12353915.html

2.得到网页地址后可以利用上一篇文章学习到的requests库函数进行页面获取,如图(笔者这里使用了IDLE)

简单解释一下每条代码:

>>> import requests	#引入requests库
>>> r = requests.get("https://item.jd.com/12353915.html")	
#使用get库函数请求需要的网页
>>> r.status_code	#查看请求返回的状态码(200为成功)
200
>>> r.encoding	#查看网页编码格式
'gbk'
>>> r.text[:1000]	
#从上图中可以看到r.text返回的是字符串类型,由于一般网页的源码较庞大,
#所以这里之查看前1000个字符,结果如上图。


3.将这个小实战整理成代码文件:

import requests
url = "https://item.jd.com/12353915.html"
try:	#用于做捕获异常并进行处理。
    r = requests.get(url)
    r.raise_for_status()	#前文讲过,用于测试请求是否出错,若出错则抛出异常
    r.encoding = r.apparent_encoding #讲编码方式设为根据网页内容所推断出的编码方式
    print(r.text[:1000])
except:
    print("爬取失败")


实战2:BOSS直聘职位页面的爬取

1.寻找需要爬取的网页

该网页地址为https://www.zhipin.com/job_detail/a338680773aa98491HRy3tS9E1Y~.html

2.得到网页地址后可以根据前一个小实战进行页面获取,如图(笔者这里使用了IDLE)

3.从上图中可以看到,我们并没有得到我们想要的页面,发生了错误,这是什么原因呢?

我们来看一下我们发起请求的请求头:

从图中,我们可以看到,我们的‘User-Agent’为‘python-requests/2.20.1’,’User-Agent‘字段所表示的意义是浏览器版本,这个字段会被服务器接收到,并根据浏览器版本进行相应的处理。我们的请求如实地告诉了对方服务器,我们是一个爬虫,而对方服务器据此拒绝了我们的请求,所以出现了错误。那我们应该怎么办?

根据上一篇博客讲到的,get函数可以传入一定的自定义参数来发起请求。我们可以手动修改‘User-Agent’字段,来达到隐藏自己的目的。

这样,我们就成功获取到了我们想要的页面。

3.整理一下代码:

import requests
url = "https://www.zhipin.com/job_detail/a338680773aa98491HRy3tS9E1Y~.html"
try:	#用于做捕获异常并进行处理。
    kv = {'User-Agent':'Mozilla/5.0'} #设置'User-Agent'字段
    r = requests.get(url,header=kv)
    r.raise_for_status()	#前文讲过,用于测试请求是否出错,若出错则抛出异常
    r.encoding = r.apparent_encoding #讲编码方式设为根据网页内容所推断出的编码方式
    print(r.text[:1000])
except:
    print("爬取失败")

实战3:百度/360等搜索引擎关键词提交

1.如果我们希望爬取某些搜索引擎的搜索结果该怎么办?

我们先观察一下使用搜索引擎搜索后的网页。

网页地址为:https://www.baidu.com/s?wd=python

可以看到我们搜索的关键词也在网页中,并且作为wd参数的值。

由此可以推测,我们搜索的关键字被作为请求中的某个参数,服务器根据该参数返回搜索结果。

小结一下:

2.根据上述知识,进行搜索的爬取

简单解释一下代码:

>>> import requests
>>> kv = {'wd':'python'}	#自定义'wd'字段的参数
>>> r = requests.get("http://www.baidu.com/s", params=kv)	#设置请求的参数列表
>>> r.status_code
200
>>> r.request.url	#查看爬取的网页url
'http://www.baidu.com/s?wd=python'
>>> len(r.text)
452794

tip:在发起请求时,也可以尝试用字符串拼接的方式来将参数提交给服务器,可以自己尝试一下。

3.整理一下代码:

import requests
url = "https://www.baidu.com/s"
keyword = "python"
try:	#用于做捕获异常并进行处理。
    kv = {'wd':keyword}
    r = requests.get(url,params=kv)
    print(r.request.url)
    r.raise_for_status()	#前文讲过,用于测试请求是否出错,若出错则抛出异常
    print(len(r.text))
except:
    print("爬取失败")

4.可以根据这个小实战,自己尝试写一下360,搜狗等搜索引擎的搜索页面获取。

实战4:网络图片爬取和存储

1.预备知识与材料

我们从中选取一个页面,比如

http://www.ngchina.com.cn/photography/photo_of_the_day/5955.html

并得到图片地址(在需要的图片上右键,左键点击复制图片地址)

http://image.ngchina.com.cn/2019/0707/20190707123014213.jpg

2.编写程序,爬取该图片

简单解释下代码:

>>> import requests
>>> path = "D://get_img/img1.jpg"	#保存图片的路径
>>> url = "http://image.ngchina.com.cn/2019/0707/20190707123014213.jpg"
>>> r = requests.get(url)	#发起请求
>>> r.status_code
200
>>> with open(path, 'wb') as f:	#以二进制写打开该文件
	f.write(r.content)	#将爬取到页面以二进制形式写入该文件
    #r.content的用法可以参考上一篇博客,它用于返回爬取页面的二进制形式
645364
>>> f.close()	#关闭文件


去磁盘的相应位置查看一下结果:

3.整理一下该代码:

#该代码对上面的操作进行了一定优化,
#一是可以将图片保存成它自己本来的名字,
#二是加入了异常处理和判断,使代码更稳定
import requests
import os
url = "http://image.ngchina.com.cn/2019/0707/20190707123014213.jpg"
root = "D://get_img//"	#保存文件的目录
path = root + url.split('/')[-1]	#将图片名与路径拼接
				#↑这里是使用split将url字符串以'/'拆分成字符串列表,并返回最后一个
try:
    if not os.path.exists(root):	#判断是否存在保存文件的目录,若没有则创建
        os.mkdir(root)
    if not os.path.exists(path):	#判断该文件是否已经被爬取,若没有则爬取
        r = requests.get(url)
        with open(path, 'wb') as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已经存在")
except:
    print("爬取失败")

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值