三、Requests库网络爬虫实战(学习笔记)

本文是一篇关于使用Requests库进行网络爬虫实战的学习笔记,包括京东、亚马逊商品页面爬取,百度/360搜索关键词提交,网络图片下载和IP地址归属地查询的实例。在实践中遇到如登录页面、状态码503等问题,并提供了部分代码和实操步骤。

三、Requests库网络爬虫实战(学习笔记)

一、实例1:京东商品页面的爬取

1.获取某商品的信息

商品连接:https://item.jd.com/2967929.html
工具:IDLE
过程:

>>>import requests # 加载requests库
>>>r = requests.get("https://item.jd.com/2967929.html") # 通过get方法获取链接内容
>>>r.status_code # 观察返回的状态码的信息
>>>r.encoding #查看编码
# ‘gbk’说明我们从http头部就可以解析出这个页面的编码信息;京东的网站提供了页面信息的相关编码
>>>r.text[:1000]

2.全代码

import requests 
url = "https://item.jd.com/2967929.html"
try:
	r = requests.get(url)
	r.raise_for_status()
	r.encoding = r.apparent_encoding
	print(r.test[:1000])
except:
	print("爬取失败")

3.实操(IDLM)

在这里插入图片描述

第一次尝试课程给的连接,会显示这个登陆的页面,以为是因为商品下架,所以换了一个新的链接。发现依然是登陆界面,决定登陆试试,但还是不行。有点蒙了。

二、实例2:亚马逊商品页面的爬取

1.获取某商品的信息

商品连接:https://www.amazon.cn/gp/product/BO1M8L5Z3Y

链接已失效,自己操作时任意选取其他商品

工具:IDLE
过程:

>>>import requests # 加载requests库
>>>r = requests.get("https://www.amazon.cn/gp/product/BO1M8L5Z3Y") # 通过get方法获取链接内容
>>>r.status_code # 观察返回的状态码的信息
>>>r.encoding #查看编码
>>>r.encoding = r.apparent_encoding
>>>r.text

将发现状态码为503,访问失败

>>>r.request.headers

原因:头部字段“Accept-Encoding”;爬虫忠实的告知亚马逊的服务器“本次访问由PythonRequests库的程序产生”。而亚马逊服务器提供来源审查,不支持这样的访问
解决方法:让我们的程序模拟浏览器向亚马逊发起请求

>>>kv = {'user-agent':'Mozilla/5.0'}
>>>url = "https://www.amazon.cn/gp/product/BO1M8L5Z3Y"
>>>r = requests.get(url, headers = kv)
>>>r.status_code
>>>r.request.headers
>>>r.text[:1000]

2.全代码

import requests
url = "https://www.amazon.cn/gp/product/Bo1M8L5Z3Y"
try:
	kv = {'user-agent':'Mozilla/5.0'}
	r =requests.get (ur1,headers=kv)
	r.raise_for_status()
	r.encoding =r.apparent_encoding
	print (r.text[1000:2000])
except:
	print("爬取失败")

3.实操(IDLM)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、实例3:百度/360搜索关键词提交

1.搜索引擎关键词提交接口

百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接口;
http://www.so.com/s?q=keyword
工具:IDLE
过程:

>>>import requests # 加载requests库
>>>kv = {'wd':'Python'}
>>>r = requests.get("https://www.baidu.com/s",params = kv) # 通过params将键值对输入进去
>>>r.status_code # 观察返回的状态码的信息
>>>r.request.url # 发给百度的request的url是什么
>>>len(r.text) # 观察返回的长度

2.全代码

import requests
keyword = "Python"
try:
	kv = {'wd':keyword}
	r = requests.get("http://www.baidu.com/s", params=kv)
	print(r.request.url)
	r.raise_for_status ()
	print(len(r.text))
except:
	print("爬取失败")

很奇怪这里的键值对怎么没有引号

3.实操(IDLM)

在这里插入图片描述

四、实例4:网络图片的爬取和存储

1.网络图片的爬取

网络图片链接的格式:
http://www.example.com/picture.jpg
国家地理:
http://www.nationalgeographic.com.cn/
选择一个图片Web页面:
http://www.nationalgeographic.com.cn/photography/photo_of_the_day/3921.html

现在找不到这个网站了

工具:IDLE
目的:自动爬取图片并保存至本机
过程:

>>>import requests # 加载requests库
>>>path = "D:/abc.jpg" # 要保存的本机地址
>>>url = "http://www.nationalgeographic.com.cn/2017/0211/2017021106191057.jpg" # 图片的地址右击图片查看
>>>r = requests.get(url)
>>>r.status_code # 观察返回的状态码的信息
>>>with open(path, 'wb') as f: #打开文件,要存储的.jpg,并定义为文件标识符f
		f.write(r.content) # 将返回的内容(二进制形式)写入文件
>>>f.close() # 将文件关

2.全代码

import requests
import os
url = "http://www.nationalgeographic.com.cn/2017/0211/2017021106191057.jpg"
root = "D://pics//" # 定义根目录
path = root + url.split('/')[-1] #根目录加文件链接中以反斜杠分隔的最后后一部分
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("爬取失败")

3.实操(IDLM)

在百度上随便找了一张图片https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201902%2F10%2F20190210191623_pknjb.jpg&refer=http%3A%2F%2Fb-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1615436502&t=5212f45891e1544606d5a902d835b891

在这里插入图片描述

在这里插入图片描述

不得不说老婆太美了

五、实例5:IP地址归属地的自动查询

1.判断地址归属地

判断地址的归属地需要一个库
因此去网上寻找相关资源:www.ip138.com

工具:IDLE
目的:自动查询IP地址归属地
过程:

>>>import requests # 加载requests库
>>>url = "http://m.ip138.com/ip.asp?ip=" # 将解析出的接口用url变量表示
>>>r = requests.get(url + '202.204.80.112')
>>>r.status_code # 观察返回的状态码的信息
>>>r.text[-500:] # 查看最后500个字符

2.全代码

import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
	r = requests.get(url + '202.204.80.112')
	r.raise_for_status()
	r.encoding = r.apparent_encoding
	print("r.text[-500:]")
except:
	print("爬取失败")

3.实操(IDLM)

在这里插入图片描述

不太明白为什么既没有爬取失败,又得不到想要的信息

六、小结

第一次实验实例发现只有实例4爬取成功(实例4也算叭);而其他的例子也并不算爬取失败,但是无法的得到想要的数据,并且也不知道是什么原因…暂且搁置,继续往后学。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值