Recursive Web Scraping Pagination 爬取房产文章分页问题技术咨询
问题根因排查
- 分页逻辑严重缺失:原代码仅能处理最多2页内容,没有设计循环遍历所有分页的逻辑,只要分类超过2页,后续页面数据会完全丢失
- 第一页内容被遗漏:你在代码中找到下一页链接后直接跳转至第二页爬取,完全没有采集第一页的文章数据,只有无分页的分类才会采集第一页内容
- 选择器语法错误:代码中
link[rel="next"]使用了HTML转义字符",Python代码中直接用单引号包裹属性值即可,该错误会导致部分场景下无法识别下一页链接 - 存在无效重复请求:相同URL多次发起请求,浪费资源还可能触发站点反爬
修正后可实现全分页采集的代码
from requests_html import HTMLSession def tag_words_links(url): global _session _request = _session.get(url) tags = _request.html.find('a.tag-cloud-link') links = [] for link in tags: links.append({ 'Tags': link.find('a', first=True).text, 'Links': link.find('a', first=True).attrs['href'] }) return links def parse_tag_links(link): global _session current_url = link articles = [] while True: # 先爬当前页的内容 _request = _session.get(current_url) # 采集当前页所有文章链接 article_links = _request.html.find('h3 a') for article in article_links: articles.append(article.find('a', first=True).attrs['href']) # 查找下一页链接 next_page = _request.html.find('link[rel="next"]', first=True) if not next_page: # 没有下一页就退出循环 break # 有下一页就把下一页地址赋值给current_url,进入下一轮循环 current_url = next_page.attrs['href'] return articles if __name__ == '__main__': _session = HTMLSession() url = 'https://lifebridgecapital.com/podcast/' links = tag_words_links(url) # 测试multifamily分类全分页采集 print(parse_tag_links('https://lifebridgecapital.com/tag/multifamily/'))
代码说明
- 用while循环实现分页遍历,只要存在下一页链接就持续采集,兼容任意分页数量的分类页
- 每一页先采集当前页文章,再判断是否有下一页,不会遗漏任何分页的数据
- 移除了重复请求逻辑,每个页面仅请求一次
- 兼容无分页的分类场景,没有下一页链接会自动结束循环返回数据
内容的提问来源于stack exchange,提问作者Abbas
相关产品推荐
相关产品推荐

