网站首页 > 技术文章 正文
Python爬虫技术就是指通过Python语言来编写一些自动化的数据处理程序从网页上来获取自己想要的数据,我们可以通过Python爬虫来获取公开网页上的数据,对数据进行分析、存储、数据可视化展示等操作,下面我们就带大家来完成一个最基础的Python爬虫的搭建。
环境准备
想要实现Python爬虫,就必须要确保安装了Python的环境以及必要的Python爬虫库,如下所示,我们可以通过pip工具来安装需要的爬虫库。
pip install requests
pip install beautifulsoup4
其中
- requests:用于发送 HTTP 请求并获取网页内容。
- beautifulsoup4:用于解析 HTML 页面,提取数据。
发送请求获取网页内容
爬虫的第一步也是比较核心的一步就是发送HTTP请求获取网页中HTML的内容。一般情况下这个操作通常就是由我们的request库来完成,如下所示。
import requests
# 目标网址
url = "https://example.com"
# 发送 GET 请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
print(response.text) # 打印网页内容
else:
print("请求失败,状态码:", response.status_code)
解析网页内容
通过Request获取到网页中的内容之后,接下来就是需要通过BeautifulSoup 来解析 HTML,然后提取到我们需要的网页中的数据内容,如下所示。
from bs4 import BeautifulSoup
# 获取网页内容
html_content = response.text
# 创建 BeautifulSoup 对象进行解析
soup = BeautifulSoup(html_content, 'html.parser')
# 输出网页的结构
print(soup.prettify()) # 美化输出 HTML 结构
提取特定内容
如果想要获取到网页中的某些特定的数据信息,如下所示,展示了如何获取网页中的所有的连接信息。
# 查找所有的 标签
links = soup.find_all('a')
# 打印所有链接的 href 属性
for link in links:
print(link.get('href'))
或者可以根据HTML的标签、ID、Class等属性提取对应的展示标签内容,来获取相关的信息,如下所示。
# 根据 class 属性查找
links = soup.find_all('a', class_='some-class')
# 根据 id 属性查找
header = soup.find(id='header-id')
print(header)
模拟浏览器行为(例如登录)
当然除了上面的这些简单的操作之外,我们还可以模拟用户的操作行为,例如网站上可能会通过JavaScript或者是通过表单的形式来提交用户登录信息,这个时候,我们就可以通过Request库来模拟网页等操作,如下所示。
# 登录时需要提交的数据
payload = {
'username': 'your_username',
'password': 'your_password',
}
# 登录请求
login_url = "https://example.com/login"
session = requests.Session() # 创建一个会话
login_response = session.post(login_url, data=payload)
# 访问需要登录后的页面
page_url = "https://example.com/dashboard"
page_response = session.get(page_url)
# 打印页面内容
print(page_response.text)
处理反爬虫机制
现在很多网站为了能够留住客户信息获取渠道,都设置有反爬虫机制,例如对于IP的限制、对于验证码限制、对于User-Agent的检测等等,为了应对这些情况我们可以设置请求头信息,将我们的请求伪装成浏览器的请求,然后可以防止反爬虫机制,如下所示。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
print(response.text)
数据存储
最终在我们获取到了数据之后,我们可以将这些数据存储到本地方便在其他地方使用,如下所示,展示了如何将数据存储到CSV 文件中。
import csv
# 假设我们提取了标题和链接
data = [("Title1", "http://example.com/1"), ("Title2", "http://example.com/2")]
# 存储到 CSV 文件
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'URL']) # 写入表头
writer.writerows(data)
或者也可以将数据存储到JSON文件中提供Mork调用。
import json
data = {
"title": "Example Title",
"url": "http://example.com"
}
with open('output.json', 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, ensure_ascii=False, indent=4)
爬虫的基本结构
介绍完上面的步骤之后,下面我们给出一个简单爬虫的基本结构如下所示。
import requests
from bs4 import BeautifulSoup
def fetch_data(url):
# 发送请求
response = requests.get(url)
if response.status_code != 200:
print("请求失败")
return None
return response.text
def parse_data(html):
# 解析 HTML 内容
soup = BeautifulSoup(html, 'html.parser')
# 提取数据
data = []
for item in soup.find_all('div', class_='item'):
title = item.find('h2').get_text()
link = item.find('a')['href']
data.append((title, link))
return data
def save_data(data):
# 存储数据
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Link'])
writer.writerows(data)
def main():
url = "https://example.com"
html = fetch_data(url)
if html:
data = parse_data(html)
save_data(data)
if __name__ == '__main__':
main()
在上面的这个结构中,展示了如何发送请求、如何解析网页数据。然后通过循环、条件判断等操作来获取网页信息,然后将数据写入到了CSV文件中。
总结
上面这个步骤,只涉及到了Python爬虫技术最为核心基础的部分,在实际开发中还有很多高级技巧的使用,例如AJAX请求处理、利用代理防止IP封锁、定时爬取等,但是需要注意爬虫本身并不违法,但是利用技术干一些违法的事情就是破坏底线了,所以如果网站明确禁止爬取,最好遵守规则。
猜你喜欢
- 2025-04-06 想快速上手Python网络爬虫?这份实战指南你不能错过!
- 2025-04-06 Python网络爬虫的时候json=就是让你少写个json.dumps()
- 2025-04-06 5分钟学会Python爬虫,小白也能轻松上手!
- 2025-04-06 聊聊在工作中的python爬虫(python爬虫找工作)
- 2025-04-06 30分钟掌握用Python写网络爬虫,入门到实战教程,黑客入门第一步
- 2025-04-06 Python爬虫常用的8个技巧,让你爬取数据得心应手
- 2025-04-06 Python3爬虫教程与示例代码(python爬虫基本代码)
- 264℃Python短文,Python中的嵌套条件语句(六)
- 263℃python笔记:for循环嵌套。end=""的作用,图形打印
- 261℃PythonNet:实现Python与.Net代码相互调用!
- 256℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 256℃Python实现字符串小写转大写并写入文件
- 116℃原来2025是完美的平方年,一起探索六种平方的算吧
- 96℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 89℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)