Python实现一个基础爬虫?_用python做一个爬虫
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封锁、定时爬取等,但是需要注意爬虫本身并不违法,但是利用技术干一些违法的事情就是破坏底线了,所以如果网站明确禁止爬取,最好遵守规则。