爬虫笔记--Requests库的应用(网页爬取)
发布时间
阅读量:
阅读量
上个月讲解了requests库的主要参数与功能。最近我们分享了一些基于requests库的应用程序设计方法。所有学习内容均以《Python网络爬虫与信息提取》为基础进行开发。
一、网页爬取框架
该库的主要功能是负责实现网络数据采集。其采用相似的基础机制来进行网页抓取。
#爬取网页通用代码框架
import requests
def getHTMLText(URL):
try:
r = requests.get(URL,timeout=30)
#timeout设置一个返回时间
# 如果在这个时间之内请求没有返回
# 就返回一个TimeError
r.raise_for_status()
r.encoding = r.apparent_encoding
#将网页的编码实际分析值传递给猜测值
return r.text
except:
return "产生异常"
if __name__=="__main__":
URL = "http://www.baidu.com"
print(getHTMLText(URL)) # 打印爬取信息
为了避免各种可能出现的问题,并非每条网页都能被成功抓取,在此情况下我们设置了异常处理机制以防止可能出现的各种错误。通过该框架系统我们可以获取部分网页数据,并且需要特别注意并非每条进入数据库的记录都对应真实存在的数据源
二、爬取网页的文件
有时为了获取网页上的某些内容,但是如果没有下载按钮可用时,则可以用这种方法试试看.
#爬取web网页的photo文件
import requests
import os # os库对计算机文件进行操作(主要用来判断文件是否存在和建立文件)
url = "http://img0.dili360.com/pic/2018/09/26/5bab38dfd80333y53304453_t.jpg"
root = "X://Get-web-photo//"
path = root + url.split("/")[-1]
#运用split函数对url进行切片,并用分割后的字符串列表的最后一个元素
#这里这么操作可以得到文件的名字和后缀,配合OS库就能够完成文件的保存
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)
print("文件保存成功")
f.close()
else:
print("文件已经存在")
except:
print("获取文件失败")
从该处获取此方法还可以用于获取其他文件。由于网页下载通常采用链接方式进行操作。
三、向网页提交搜索请求
有时,在处理网页内容时, 我们常会以百度搜索为主进行操作. 于是乎, 在探索网页搜索时
我们来观察一下百度搜索是怎么提交关键字的


是不是找到什么规律了?
对啊!没错啦!其实说起来就是这样——搜索本质上也是一种提交机制;我们可以通过这种方式来发布关键字以便搜索。
举个例子来说吧,在这里我会给出一段关于IP地址归属地查询的代码片段。其本质都大同小异的是这些方法都是基于相同的基本逻辑设计的:它们都利用关键字与URL进行数据提交请求,在服务器端解析返回的信息后就能实现对IP地址来源位置的具体识别和定位功能了。
提交百度搜索也是一样的,你可以尝试着做一下。
import requests
keyword = "111.227.147.21"
try:
kv = {'ip':keyword} # 构建键值对替换ip进行查询
r = requests.get("http://m.ip138.com/ip.asp",params = kv)
print(r.request.url) #打印出ip地址查询界面的url
r.raise_for_status() # 错误返回函数
print(len(r.text)) # 页面字节长度
print(r.text[-500:]) # 打印页面后500个字节信息
except:
print("查询失败")
至此,几款关于requests的小应用都向大家展示出来了。其核心机制是相同的,都是基于requests库对URL执行多种功能模块以实现特定目标。
全部评论 (0)
还没有任何评论哟~
