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

此处为参考学习用。

相关推荐
kobe_OKOK_2 小时前
__getattr__和__getattribute__如何用
python
全栈弄潮儿3 小时前
Python实战第2期: 变量与数据类型
后端·python·agent
长沙三为智能科技3 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
Cc.Y3 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川3 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸4 小时前
排序算法介绍
python·算法·排序算法
笔墨登场说说4 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
MoRanzhi12035 小时前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
刘科领5 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源5 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计