之前没做过,写个最简单的、类似Hello World的爬虫案例
1、部署开发环境,安装python,去官网下载 Download Python | Python.org

2、傻瓜式安装,都勾选上,点击install即可
3、控制台查看是否安装运行成功
4、安装依赖库
pip install requests beautifulsoup4 lxml(爬取数据)

pip install pandas openpyxl(生成excel文件)
5、写代码,获取网站的数据,最后运行命令 python scraper.py(文件名称)即可
import requests
from bs4 import BeautifulSoup
import time
import random
import pandas as pd
# 目标网页 URL
urls = [
"xxx.html",
"xxx.html"
]
# 要过滤的文本内容
filter_keywords = [
"标段(包)编号",
"标段(包)名称",
"中标单位",
"项目经理",
"中标价格",
"工期(天)"
]
# 创建一个空的列表,用于保存提取的数据
extracted_data = []
# 循环遍历每个 URL
for url in urls:
# 发送请求获取网页内容
response = requests.get(url)
if response.status_code == 200:
# 使用 BeautifulSoup 解析网页
soup = BeautifulSoup(response.content, 'lxml')
# 查找所有 <td> 标签
tds = soup.find_all('td', style='border-left:1px solid;border-top:1px solid')
# 初始化列表,用于保存当前页面提取的所有字段
current_row = []
for td in tds:
# 查找 <td> 标签下的 <div> 标签
div = td.find('div')
if div:
# 获取 <div> 标签中的文本内容
text = div.get_text(strip=True) # strip=True 去除多余的空格
# 判断文本是否包含需要过滤的关键字
if any(keyword in text for keyword in filter_keywords):
continue # 如果包含关键词,跳过该条数据
# 添加提取的数据到当前行
current_row.append(text)
# 将一行数据(6个字段)添加到提取数据列表
if len(current_row) == 6: # 确保每行有6个字段
extracted_data.append(current_row)
# 在每次请求后暂停2秒,避免被封禁
print(f"\r\n===============================")
time.sleep(random.uniform(1, 3))
else:
print(f"请求失败,无法获取页面:{url},状态码:{response.status_code}")
# 定义 Excel 表格的列名
columns = ["编号", "项目名称", "中标单位", "项目负责人", "中标价格", "工期"]
# 将提取的数据转换为 DataFrame
df = pd.DataFrame(extracted_data, columns=columns)
# 保存为 Excel 文件
df.to_excel("extracted_data_formatted.xlsx", index=False, engine='openpyxl')
print("数据已成功保存到 'extracted_data_formatted.xlsx' 文件中。")
5547

被折叠的 条评论
为什么被折叠?



