爬取数据分页实现求助:多页面商品链接获取失败
多页面商品链接爬取问题修复方案
你的代码存在以下几个关键问题:
- URL未完成变量替换:原URL字符串中的
{page}只是占位符,没有实际替换成传入的页码参数,导致请求的URL始终是错误格式。 - 变量未初始化:
links变量没有提前定义就直接调用append方法,会触发NameError。 - 函数调用缩进错误:
page1 = get_product_links(1)被缩进在函数定义内部,永远不会被执行。 - append方法使用错误:
links.append()返回的是None,你把它赋值给res后,后续的if res:判断永远不会生效,无法正确输出链接。
修复后的代码(支持多页爬取)
from requests_html import HTMLSession s = HTMLSession() def get_product_links(page): # 用f-string完成URL的页码替换 url = f"https://lakesshoweringspaces.com/catalogue-product-filter/page/{page}" r = s.get(url) # 提前初始化空列表存储链接 links = [] products = r.html.find("article.contentwrapper section.collection-wrapper-item") for item in products: # 先获取a标签元素,再判断是否存在 a_tag = item.find("a", first=True) if a_tag: link = a_tag.attrs.get("href") links.append(link) print(link) else: print("未找到商品链接") return links # 爬取第1到第5页的示例(可根据实际页数调整) all_links = [] for page_num in range(1, 6): page_links = get_product_links(page_num) # 如果当前页面没有返回链接,说明可能已经到最后一页,停止循环 if not page_links: break all_links.extend(page_links) print("所有商品链接:") print(all_links)
额外说明
- 循环时加入了空列表判断,当某一页没有获取到链接时自动停止,避免无效请求。
- 使用
attrs.get("href")替代直接取attrs["href"],可以避免因标签没有href属性导致的KeyError。
内容的提问来源于stack exchange,提问作者HRol
相关产品推荐
相关产品推荐

