爬虫爬取链接丢失:遍历205页仅保留78条而非4000+条链接
问题原因及解决方法
为什么只得到78条链接?
- 列表被重复重置:你把
list1=[]写在了分页循环的内部,每爬取一页就会清空并重新初始化列表。前面页面的链接全部被覆盖,最终列表只保留了最后一页的78条左右链接。 - 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
相关产品推荐
相关产品推荐

