如何提取Google SERP标题关联链接并将数据写入CSV文件
问题修复方案
核心错误原因
yuRUbf类的div本身没有href属性,href是其内部嵌套的<a>标签的属性,你之前直接取div的文本内容自然拿不到链接。另外原代码还有两处影响运行的问题:
terms变量被重复赋值,先赋值了示例列表又清空去读取未打开的f文件会触发报错- 直接用默认参数的requests请求谷歌会被反爬拦截,需要添加请求头伪造浏览器身份
修复后完整代码
from bs4 import BeautifulSoup import requests import csv # 读取搜索关键词文件 with open("web_search_terms.txt", "r", encoding="utf-8") as f: terms = [line.strip() for line in f if line.strip()] # 添加请求头避免反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } with open("web_urls.csv", "w", encoding="utf-8-sig", newline="") as f_out: writer = csv.writer(f_out) writer.writerow(["Search Term", "URL"]) for t in terms: url = f"https://google.com/search?q={t}" print(f"Getting {url}") html_page = requests.get(url, headers=headers) soup = BeautifulSoup(html_page.content, "html.parser") divs = soup.find_all("div", attrs={"class": "yuRUbf"}) for item in divs: # 定位div下的a标签,提取href属性 link_tag = item.find("a") if link_tag and link_tag.get("href"): real_url = link_tag.get("href") writer.writerow([t, real_url])
关键修改说明
- 补充请求头参数,避免谷歌返回403拒绝访问
- 提取
yuRUbfdiv内的a标签,调用get("href")获取链接地址,替换原有的get_text()方法 - 优化了关键词读取和CSV写入的编码配置,避免中文乱码和多余空行问题
- 新增链接存在性判断,避免空值导致写入报错
内容的提问来源于stack exchange,提问作者Jimmy Friedman
相关产品推荐
相关产品推荐

