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

Python requests.get获取Goodreads页面异常:始终返回第1页

Goodreads爬虫翻页失效问题解决

你的问题核心是Goodreads的反爬机制拦截了无标识请求,默认requests请求会带上python-requests/x.x.x的User-Agent,被网站识别为爬虫后,无论指定哪个page参数,都会强制返回第一页内容。另外你用了绝对路径的XPath,一旦页面结构微调就会失效,也需要优化。

解决步骤

  • 添加请求头伪装浏览器:给所有requests.get请求带上包含合法User-Agent的headers,让网站认为是正常浏览器访问
  • 优化XPath选择器:放弃脆弱的绝对路径,改用基于class、属性的相对选择器,提升稳定性
  • 规范资源管理:用with语句处理文件和请求,避免资源泄漏

修改后的代码

import requests
from lxml import html

# 基础配置
root = "https://www.goodreads.com"
# 替换成你自己浏览器的User-Agent,可通过F12开发者工具Network面板获取
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"
}
save_path = "C:/Users/PCP/Desktop/images/"

# 爬取第2到第3页(对应原代码pageno<4的逻辑)
for pageno in range(2, 4):
    # 带headers请求书单页面
    page = requests.get(f"{root}/shelf/show/fantasy?page={pageno}", headers=headers)
    tree = html.fromstring(page.content)
    
    # 用相对XPath提取所有书籍链接(替换原绝对路径)
    book_links = tree.xpath('//div[@class="elementList"]//a[@class="bookTitle"]/@href')
    imageno = 1
    
    for link in book_links:
        try:
            # 请求书籍详情页,同样带headers
            book_page = requests.get(f"{root}{link}", headers=headers)
            book_tree = html.fromstring(book_page.content)
            
            # 提取封面图片链接
            cover_url = book_tree.xpath('//img[@id="coverImage"]/@src')[0]
            
            # 下载封面,用with自动管理文件
            cover_response = requests.get(cover_url, headers=headers)
            with open(f"{save_path}book{imageno}.jpg", "wb") as f:
                f.write(cover_response.content)
                
            imageno += 1
        except Exception as e:
            print(f"处理书籍{link}出错: {str(e)}")
            continue

额外提示

  • 不要频繁请求,建议添加time.sleep(1)之类的延迟,避免触发更严格的反爬
  • 如果还是被拦截,可以尝试使用requests.Session()保持会话,模拟浏览器的Cookie持久化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:36:18