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")
关键注意点
- 第二个函数返回的是多个元素的集合(ResultSet),必须遍历这个集合才能处理单个元素
- Google搜索结果的链接是跳转格式(
/url?q=真实链接&...),需要额外解析出真实URL - 始终要做空值判断,避免因页面结构变化导致的索引或属性错误
内容的提问来源于stack exchange,提问作者Alon
相关产品推荐
相关产品推荐

