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、服务条款和当地法律,不要高频请求,不要抓取隐私或非公开数据。

此处为参考学习用。

相关推荐
用户7783366132111 小时前
搜索页的 URL 状态管理:可分享、可回退、可刷新
python·api
Liaiyang661 小时前
空圈容错视角下的无人机全链路审计:从理论框架到耦合式检验
人工智能·pytorch·python·深度学习·系统架构·自动驾驶·无人机
liuchangng1 小时前
Jev 模型研究:从生成式大模型到决策式模型——System One、RLCD 校准与采用边界
java·javascript·人工智能·python·深度学习
微小冷1 小时前
patsy:Python中的统计建模语法
python·统计·建模·patsy·statmodels
我是神61 小时前
抖音直播QQ估价直播软件exe详解
python·tkinter·qq评估
2601_966949652 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash
打工仔折腾 AI2 小时前
用 Docker 部署 Excalidraw 手绘白板并配置固定公网访问的完整实践
人工智能·后端·python
我的xiaodoujiao3 小时前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
2601_962885724 小时前
A股数据源和 API 怎么选?(2026 全景选型指南 + 决策树)
python