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

Python用BeautifulSoup爬取PDF链接存列表返回标签及DataFrame格式问题

问题原因

  • 核心问题是变量名冲突:你在全局预先定义了存储链接的列表link = [],但在内层遍历a标签的循环中,又把循环变量命名为link,直接覆盖了原有的列表变量。后续执行link.append(fUrl)时操作的已经不是列表,而是BeautifulSoup的Tag对象,最终打印的link其实是最后一轮循环得到的a标签对象,自然存储的是完整标签而非链接。

修复后代码

from bs4 import BeautifulSoup
import requests, lxml
import re
from urllib.parse import urljoin
from googlesearch import search
import pandas as pd

# 可批量添加多个查询关键词
queries = [
    'A M C College of Engineering, Bangalore',
    # 可继续追加其他query
]
# 存储所有query的结果,每个元素对应DataFrame的一行
result_list = []

for query in queries:
    # 存储当前query对应的所有符合要求的pdf链接
    current_pdf_links = []
    for site_url in search(query, tld='co.in', start=0, stop=1):
        # 新增UA请求头,避免被网站反爬拦截
        resp = requests.get(site_url, headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
        })
        soup = BeautifulSoup(resp.text, 'lxml')
        # 循环变量改名,避免覆盖列表变量
        for a_tag in soup.select("a[href$='.pdf']"):
            if re.search(r'nirf', str(a_tag), flags=re.IGNORECASE):
                f_url = urljoin(site_url, a_tag['href'])
                print(f_url)
                current_pdf_links.append(f_url)
    # 当前query的所有链接用空格拼接为字符串,加入结果列表
    result_list.append({
        'PDF LINKS': ' '.join(current_pdf_links)
    })

# 生成DataFrame,每个query对应一行
df = pd.DataFrame(result_list)
print(df)

关键改动说明

  • 修正变量名冲突:将内层遍历a标签的循环变量改为a_tag,不再覆盖存储链接的列表变量
  • 适配多查询存储逻辑:新增queries列表统一管理所有搜索关键词,每个query单独开辟临时列表存储匹配的PDF链接,处理完成后将链接拼接为空格分隔的字符串存入结果列表,最终生成的DataFrame自然每个query对应一行
  • 新增UA请求头:降低部分网站反爬策略拦截请求的概率,提升爬取成功率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:15:04