作者:mobiledu2502902777 | 来源:互联网 | 2024-11-08 17:56
本指南介绍了`requests`库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()`是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用`requests.get()`方法来获取HTML网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。
requests库的基本用法
request库的7个主要方法
requests.request() 构造一个请求,支撑以下各方法的基础方法
#获取HTML网页的主要方法,对应于HTTP的GET
requests.get(url,params,data,headers,proxies,COOKIEs,auth,verify) # params,data,headers,proxies,COOKIEs为字典类型,auth为元祖类型,verify为布尔类型参数
requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
几种属性
.states_code 返回状态码
.text 返回 html 属性
.headers 返回头部信息
.url 返回请求的链接
beautifulsoup库的基本用法
支持的解析器
支持python标准库、lxml HTML、lxml XML、html5lib四种解析器
用法:BeautifulSoup(markup,"解析器")#注意markup代表源代码,如果自己写的文本的话,注意价格str
比如:BeautifulSoup(markup,"lxml")
提取的方法
节点选择器
格式:解析后文本.节点
例如:
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
print(soup.title) #输出的是 bs4.element.Tag
>>>>输出html文本中的title节点及其标签里的内容,
获取节点属性、提取信息:
例如:
soup.title.name #获得title节点的名字,即输出的为title,一般这么用 soup.title.parent.name
soup.title.['name'] #获取title节点name属性的值
soup.title.string #获得title节点的内容
soup.title.contents #获取title节点的直接子节点列表(既有子节点,又有子节点包含的文本)(列表类型)
soup.title.children #获取直接子节点(返回的是生成器类型)
soup.title.descendants #获取所有子孙节点
soup.title.parent /parents #获取父节点/祖先节点
soup.title.next_sibling/previous_sibling #获取下一个/前一个兄弟节点(同级节点)
方法选择器
find_all(name, attrs, recursive, text, ** kwargs) ,name表示节点名称、attrs为节点属性、text为节点内的文本 #匹配所有符合条件的节点
find() #匹配第一个符合条件的节点
例如:soup.find_all('div',id='content',class_='showtxt') #查找所有的属性id为content,class为showtxt的div节点
CSS选择器
select('节点')方法选择节点
例如:
title=soup.select('title ')#选择title节点
point_attrs=title['id'] #获得title节点的id属性的值
point_text=title.get_text() #获得title节点的文本
基本的爬取过程
先使用浏览器的检查功能,分析一下网页源代码,然后就是获取网页源代码,解析HTML信息。一般使用的请求库哟有urlib、requests。解析库有:beaytifulsoup、xpath、pyquery。存储:redies、mongodb、mysql。
文本保存
save_path = 'D://storyspider' #定义保存路径
if not os.path.exists(save_path):#如果没有这个路径就创建
os.mkdir(save_path)
with open(save_path + '/' + each_name + '.txt', 'a', encoding='utf-8')as f: #以追加的方式 写入
f.write('本文网址:' + each_url)