You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网页爬虫拆分函数后出现AttributeError错误求助

问题分析与修复方案

这个错误的核心原因:你在第三个函数里直接对find_all()返回的**ResultSet(元素列表)**调用了.get()方法,但.get()是单个BeautifulSoup元素的方法,不能直接作用于列表。

错误代码示例(问题出在这里)

如果你的第三个函数是类似这样,就会触发错误:

def extract_links(result_set):
    links = []
    # 错误:直接对整个ResultSet列表调用.get()
    link = result_set.get('href')
    title = result_set.get_text()
    links.append({"link": link, "title": title})
    return links

修复后的代码逻辑

拆分后的函数需要遵循「遍历列表→处理单个元素」的逻辑,以下是完整可运行的拆分示例:

import requests
from bs4 import BeautifulSoup

# 1. 生成搜索URL列表
def generate_search_urls(keywords, pages=3):
    base_url = "https://www.google.com/search?q="
    urls = []
    for page in range(pages):
        start = page * 10
        url = f"{base_url}{'+'.join(keywords)}&start={start}"
        urls.append(url)
    return urls

# 2. 获取单页的所有<a>标签列表
def get_page_a_tags(url):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    # 定位Google搜索结果区域的<a>标签,选择器可根据页面结构调整
    return soup.find_all('a', href=True)

# 3. 遍历<a>标签列表,提取有效链接和标题
def extract_valid_data(a_tag_list):
    valid_results = []
    for a_tag in a_tag_list:
        # 对单个<a>元素调用.get()方法
        raw_href = a_tag.get('href')
        # 过滤并解析Google的跳转链接
        if raw_href and raw_href.startswith('/url?q='):
            real_link = raw_href.split('/url?q=')[1].split('&')[0]
            title = a_tag.get_text(strip=True)
            if title and real_link:
                valid_results.append({"title": title, "link": real_link})
    return valid_results

# 主执行逻辑
if __name__ == "__main__":
    search_urls = generate_search_urls(["python", "web scraping"])
    all_results = []
    for url in search_urls:
        page_a_tags = get_page_a_tags(url)
        page_results = extract_valid_data(page_a_tags)
        all_results.extend(page_results)
    
    for item in all_results:
        print(f"标题: {item['title']}\n链接: {item['link']}\n")

关键注意点

内容的提问来源于stack exchange,提问作者Alon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:50:27