Python爬虫爬取头条街拍数据遇到问题如何解决?

各位大佬,请教个问题,使用 requests 时:
s = requests.get(‘https://www.toutiao.com/api/search/content/?keyword=%E8%A1%97%E6%8B%8D&aid=24&app_name=web_search&offset=0&format=json&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp=’,int(time.time()))
发送上面这个请求后,调用 s.json()返回的信息不是正确的网页信息,但是把 keyword 后面的‘&’(即 a 前面的&)去掉后就可以正确抓取到,而且把 keyword 这个参数和其他参数换位置后不管怎么样都抓取不到。
用开发者工具查看头条街拍的 Request URL 是: https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp=1559032961134,实在搞不懂,请各位大佬帮忙。
Python爬虫爬取头条街拍数据遇到问题如何解决?


4 回复

爬街拍多没劲,爬 h 图啊哈哈


核心问题定位与解决思路

你遇到的问题很可能是反爬机制导致的。头条(尤其是移动端网页)的反爬比较严格,常见问题包括:

  1. 请求被拒/返回空数据:需要完整的请求头(特别是User-AgentCookie
  2. 数据动态加载:页面内容通过JavaScript渲染,需要分析接口或使用Selenium
  3. 参数加密_signature等加密参数需要逆向JS生成

解决方案示例(基于接口分析)

import requests
import json

def fetch_toutiao_street():
    url = "https://www.toutiao.com/api/pc/feed/"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://www.toutiao.com/ch/street/',
        'Cookie': '你的实际Cookie'  # 从浏览器复制
    }
    
    params = {
        'category': 'street',
        'utm_source': 'toutiao',
        'widen': 1,
        'max_behot_time': 0,
        'max_behot_time_tmp': 0,
        'tadrequire': 'true',
        'as': 'A1C5D9A4897A5C5',
        'cp': '5A9A757A5C5C5E1',
        '_signature': '需要从JS生成'  # 关键参数
    }
    
    try:
        resp = requests.get(url, headers=headers, params=params, timeout=10)
        data = resp.json()
        
        # 解析数据
        for item in data.get('data', []):
            if 'title' in item:
                print(f"标题: {item['title']}")
                print(f"链接: https://www.toutiao.com{item['article_url']}")
                print("-" * 50)
                
    except Exception as e:
        print(f"请求失败: {e}")

if __name__ == "__main__":
    fetch_toutiao_street()

关键点说明:

  • _signature参数需要逆向JS生成(搜索_signature in 头条JS文件)
  • 如果不会逆向,可用requests-htmlSelenium渲染页面
  • 考虑使用代理IP应对频率限制

总结:优先分析XHR接口并模拟完整请求头。

新手,慢慢来哈哈哈。

不可能吧,API 接口文档先研究清楚一下撒

顺便打个广告开源爬虫平台 Crawlab, https://github.com/ tikazyq/crawlab

Crawlab 是一个专注于爬虫的集成了爬虫管理、任务调度、任务监控、数据分析等模块的分布式爬虫管理平台,非常适合对爬虫管理、爬虫工程化有要求的开发者及企业。

最近开发的可配置爬虫正好解决你配置爬虫的问题,1-3 分钟编写好一个可运行的爬虫。

回到顶部