Python爬虫入门:从HTTP请求到数据提取的完整指南
本文详细解析使用Python编写网络爬虫的基础流程。通过介绍HTTP协议的基本工作原理,演示如何利用requests模块发起GET请求并处理响应头。随后,结合BeautifulSoup库的find与find_all方法,展示如何从HTML文档中精准提取目标标签信息,帮助初学者快速掌握爬虫核心技能。
网络爬虫基本原理
网络爬虫的核心逻辑在于向目标URL发送HTTP请求,获取服务器返回的报文主体,并从中筛选出所需的数据信息。
接下来将通过一个基础示例展示爬虫程序的基本结构。
HTTP协议基础与流程
HTTP协议基础
浏览器访问指定URL时必须遵循HTTP协议,本节将梳理相关基础知识。
HTTP交互流程
浏览网页的过程本质上是一次HTTP请求交互。在此过程中,用户主机作为客户端(由浏览器充当),向服务器发起请求。输入的URL指向服务器上的特定资源,服务器接收请求后返回响应,客户端接收到响应内容后,即可在浏览器中渲染显示请求结果。
使用Requests发起请求
Python的requests模块提供了便捷的HTTP请求发起功能。作为第三方库,安装后可直接通过import导入使用。以下介绍其基本用法。
发起HTTP请求
import requests
# 请求的首部信息
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/65.0.3325.146 Safari/537.36'
}
# 例子的url
url = 'https://voice.hupu.com/nba' # 虎扑nba新闻
# 利用requests对象的get方法,对指定的url发起请求
# 该方法会返回一个Response对象
res = requests.get(url, headers=headers)
# 通过Response对象的text方法获取网页的文本信息
print(res.text)
上述代码向虎扑服务器发送了GET请求,以获取NBA新闻首页内容。headers参数用于设置HTTP请求首部信息,指定请求的资源为虎扑NBA新闻首页。成功获取网页资源后,需进一步对内容进行提取处理。
利用BeautifulSoup解析数据
利用BeautifulSoup提取网页信息
BeautifulSoup库(即bs4)提供了多种HTML解析方法,能高效提取所需内容。成功抓取网页后,可通过BeautifulSoup对象解析页面。其中,find()和find_all()是最常用的方法,借助它们可以轻松获取特定标签或标签组。其他功能可参考bs4官方文档:BeautifulSoup。
以下是find()和find_all()方法的具体用法示例。
find(name , attrs , recursive , string , **kwargs )
# find_all()方法将返回文档中符合条件的所有tag,
find_all(name , attrs , recursive , string , **kwargs )
from bs4 import BeautifulSoup
# BeautifulSoup对象接收html文档字符串
# lxml是html解析器
soup = Beautiful(res.text, 'lxml')
# 下面的方法找出了所有class为hello的span标签
# 并将所有的结果都放入一个list返回
tags = soup.find_all('span', {'class': 'hello'})
实例扩展:
实例一:
#第一种方法
import urllib2 #将urllib2库引用进来
response=urllib2.urlopen("http://www.baidu.com") #调用库中的方法,将请求回应封装到response对象中
html=response.read() #调用response对象的read()方法,将回应字符串赋给hhtml变量
print html #打印出来
实例二:
#第二中方法
import urllib2
req=urllib2.Request("http://ww.baidu.com")
response=urllib2.urlopen(req)
html = response.read()
print html
至此,关于Python爬虫入门的介绍已完成。如需了解更多Python爬虫相关技巧,可查阅本站往期文章或继续浏览后续内容,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













