Python关键词抓取目标网站

下面以"抓取 Bing 搜索结果"为例,写一段根据关键词抓取的 Python 代码。可以把 URL 和解析规则换成你要抓取的目标网站。

安装依赖

```bash

pip install requests beautifulsoup4

```

示例代码

```python

import time

import csv

import requests

from bs4 import BeautifulSoup

from urllib.parse import urljoin

HEADERS = {

"User-Agent": (

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "

"AppleWebKit/537.36 (KHTML, like Gecko) "

"Chrome/124.0 Safari/537.36"

),

"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",

}

def scrape_bing(keyword: str, pages: int = 1, delay: float = 1.0):

"""

根据关键词抓取 Bing 搜索结果。

pages: 抓取页数

delay: 每页请求间隔,避免请求过快

"""

results = \[\]

for page in range(pages):

first = page * 10 + 1 # Bing 每页约 10 条

url = "https://www.bing.com/search"

params = {

"q": keyword,

"first": first,

}

try:

resp = requests.get(

url,

params=params,

headers=HEADERS,

timeout=15

)

resp.raise_for_status()

except requests.RequestException as e:

print(f"第 {page + 1} 页请求失败:{e}")

continue

soup = BeautifulSoup(resp.text, "html.parser")

items = soup.select("li.b_algo")

if not items:

print(f"第 {page + 1} 页未解析到结果,可能被反爬或页面结构已变化")

continue

for item in items:

a = item.select_one("h2 a")

if not a:

continue

title = a.get_text(" ", strip=True)

link = a.get("href", "")

link = urljoin("https://www.bing.com", link)

summary_tag = (

item.select_one(".b_caption p")

or item.select_one(".b_lineclamp2")

or item.select_one(".b_algoSlug")

)

summary = summary_tag.get_text(" ", strip=True) if summary_tag else ""

results.append({

"title": title,

"link": link,

"summary": summary,

})

time.sleep(delay)

return results

def save_to_csv(data, filename="results.csv"):

"""保存为 CSV 文件"""

if not data:

print("没有数据可保存")

return

with open(filename, "w", newline="", encoding="utf-8-sig") as f:

writer = csv.DictWriter(

f,

fieldnames="title", "link", "summary"

)

writer.writeheader()

writer.writerows(data)

print(f"已保存到 {filename}")

if name == "main":

keyword = input("请输入关键词:").strip()

if not keyword:

print("关键词不能为空")

else:

data = scrape_bing(keyword, pages=1)

for i, item in enumerate(data, 1):

print(f"{i}. {item'title'}")

print(f" 链接:{item'link'}")

print(f" 摘要:{item'summary'}")

print()

save_to_csv(data)

```

说明

· 该代码会访问 Bing 搜索页,提取标题、链接和摘要。

· 如果要抓取其他网站,只需要修改:

· 请求 URL

· 请求参数

· soup.select(...) 中的 CSS 选择器

· 如果目标网站需要登录、验证码或 JavaScript 渲染,requests 可能抓不到,需要改用 Selenium、Playwright 或官方 API。

· 请遵守目标网站的 robots.txt、服务条款和当地法律,不要高频请求,不要抓取隐私或非公开数据。

此处为参考学习用。

相关推荐
eric-sjq7 分钟前
小思框架 · 30M 级长上下文新架构对比技术报告
人工智能·python·深度学习·语言模型
reasonsummer2 小时前
【办公类-04-05】20261030整理手机照片(华为手机助手导出照片到日期文件夹+批量添加四级文件夹+手动转移照片更名+更改三级文件夹合并汉字名称)
python·智能手机
BD_Marathon2 小时前
【Python】初识迭代器
python
gz927cool3 小时前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
智购科技智能售货柜3 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
梯度下降者3 小时前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
AIFQuant3 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发
威哥爱编程3 小时前
Python 智能体开发实战 07:让它查课表它张口就编?给 Agent 接上真正能动手的工具
python·agent
Wang's Blog3 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
2601_962885723 小时前
按主板/科创/创业/北交分板扫描选股
python