Requests库网络爬虫实战
实例一:商品页面的爬取
通过链接获取商品信息,通过GET方法获取链接内容
【京东商品URL链接:https://item.jd.com/2967929.html
中国亚马逊网站商品链接 https://www.amazon.cn/gp/product/B01M8L5Z3Y】
如果出现需要登录信息或者状态码不对(Robots协议不允许爬取)的情况下,(通过headers字段模拟浏览器向服务器发送HTTP请求)Robots协议里不允许爬虫爬取,只允许浏览器的请求,所以重新定义user-agent,模拟浏览器访问。

代码分析
import requests
r = requests.get("https://www.amazon.cn/gp/product/B01M8L5Z3Y")
r.status_code #503 访问出现错误
r.encoding #'ISO-8859-1'
r.encoding = r.apparent_encoding
r.text #出现意外错误,由于API造成,或者有login需要登录才能查看
r.requests.headers #查看发给的信息是什么内容,告诉亚马逊访问是由Requests库产生的
kv = {'user-agent':'Mozilla/5.0'} #重新定义 user-agent是浏览器,浏览器身份表示字段
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
r = request.get(url, headers = kv)
r.status_code #200访问成功,获取产品页面成功
r.requests.headers #user-agent成功修改
r.text[:1000]
全部代码
import requests
url ="https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
kv = {'user-agent':'Mozilla/5.0'} #!!
r = requests.get(url, headers = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000:2000]}
except:
print("爬取失败")
实例二:百度360搜索关键词提交
百度的关键词接口 http://www.baidu.com/s?wd=keyword
360关键词接口 http://www.so.com/s?q=keyword
构造此URL,构造键值对(搜索的关键词:keyword)
##代码解析
import requests
kv = {'wd':'Python'} #构造键值对,关键词为Python, 360网站的标识符wd换成q
r = requests.get("http://www.baidu.com/s", params = kv) #get方法设置参数为kv键值对
r.status_code #200,请求被提交
r.request.url #发给百度的Request对应的URL是什么,wd是标识,对应搜索的关键词,Response对象中包含的Requests对象的信息,返回'http://www.baidu.com/s?wd=Python'
len(r.text) #返回的长度 653485,大约653K,不能全部打印出来(容易使IDE失效)
r.text[:1000] #打印爬取网页的前1000个字符
r.text[-500:] #打印爬取网页的最后500个字符
全部代码
import requests
keywork = "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("爬取失败")
实例三:网络图片的爬取和存储
r.text 返回Unicode型数据,一般是在网页中header中定义的编码形式,用来提取文本
r.content返回的是bytes,二级制型的数据,用来提取图片视频等。
网络图片URL链接的格式以jpg结尾
保存在本地(重命名)
import requests
path = "D:/abc.jpg"
url = "https://img10.360buyimg.com/n5/s54x54_jfs/t1/153457/35/9377/80509/5fd3300bEa14f6b0f/f60a95a9f1731200.jpg" #随便在网站里找一张图片
r = requests.get(url)
r.status_code #200 r已经包含了返回的图片
#把二进制格式保存为文件,打开一个文件abc.jpg,定义为文件标识符f,将返回内容返回到文件中
with open(path, 'wb') as f:
f.write(r.content) #表示返回内容的二进制形式
f.close() 关闭文件
*注意缩进形式,IndentationError: expected an indented block,缩进错误!在:后一定要按Tab键缩进。
用图片原来名字保存在本地
import requests
import os
url = "https://img11.360buyimg.com/n5/jfs/t1/154443/39/2310/151777/5f87c2e8E589a87fa/5cb005eae728b852.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("文件获取失败")
实例四:IP地址归属地的自动查询
ip.138的网站:www.ip138.com
查询IP地址或者域名 (适合人的交互方式)
通过这个网站提交IP地址的URL链接,接口形式
http://m.ip138.com/ip.asp?ip=ipaddress
通过ip=ipaddress,ipaddress是参数,返回内容(地址对应的物理位置)
在网站上看到的人机交互方式(图形等)在正式的向后台服务器提交的时候以链接的形式提交,通过浏览器解析知道向后台提交的链接形式–>可以用python代码向服务器正式的提交
import requests
url ='http://m.ip138.com/ip.asp?ip='
try:
r = requests.get(url+'202.204.80.112') #北京理工大学教育网的IP地址
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:]) #返回文本的最后500个字节
except:
print("爬取失败")
本文介绍了使用Python的Requests库进行网络爬虫的基本操作,包括爬取商品页面、搜索关键词提交、网络图片爬取及存储,以及IP地址归属地查询等实用案例。

244

被折叠的 条评论
为什么被折叠?



