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

爬虫爬取链接丢失:遍历205页仅保留78条而非4000+条链接

问题原因及解决方法

为什么只得到78条链接?

  1. 列表被重复重置:你把list1=[]写在了分页循环的内部,每爬取一页就会清空并重新初始化列表。前面页面的链接全部被覆盖,最终列表只保留了最后一页的78条左右链接。
  2. URL构造错误:你的f-string没有正确把页码变量i插入到请求地址里,当前URL是固定的https://www.oglasnik.hr/prodaja-automobila?page%7Bi%7D=,相当于每次请求同一个页面——即便你说控制台输出了4000条,这个URL格式也肯定不符合网站分页规则,必须修正。

如何获取全部4000+条链接?

修改后的代码如下:

import requests
from bs4 import BeautifulSoup
import re
import pandas as pd

# 将列表初始化放到循环外部,避免被重复清空
list1 = []

# 模拟浏览器请求头,降低被反爬拦截的概率
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"
}

for i in range(1, 206):
    # 修正URL构造,确保每次请求对应页码的页面
    # 若网站实际分页参数是?page=1,可改成f"https://www.oglasnik.hr/prodaja-automobila?page={i}"
    url = f"https://www.oglasnik.hr/prodaja-automobila?page[{i}]="
    page = requests.get(url, headers=headers)
    
    # 检查请求是否成功,便于排查异常
    if page.status_code != 200:
        print(f"第{i}页请求失败,状态码:{page.status_code}")
        continue
    
    soup = BeautifulSoup(page.content, 'html.parser')
    a_tags = soup.find_all('a', href=re.compile('https://www.oglasnik.hr/prodaja-automobila/'))
    
    for ele in a_tags:
        link = ele.get('href')
        # 去重,避免重复添加同一链接
        if link not in list1:
            list1.append(link)
            print(f"Appended link: {link}")

# 导出CSV文件
df = pd.DataFrame(list1, columns=['Link'])
try:
    df.to_csv('links.csv', index=False)
    print(f"共保存{len(list1)}条链接到CSV文件成功!")
except Exception as e:
    print(f"保存CSV出错:{e}")

关键修改说明:

  • 把list1=[]移到分页循环外,确保所有页面的链接都能累积到同一个列表中。
  • 修正URL的f-string写法,正确插入页码变量i,保证每次请求不同的分页页面。
  • 添加User-Agent请求头,模拟浏览器访问,减少被网站反爬拦截的可能。
  • 增加请求状态码检查,方便快速定位分页请求失败的问题。
  • 加入链接去重逻辑,避免重复链接占用存储空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:57:49