Python中如何爬取裁判文书网的搜索信息,有没有现成的轮子呢?

http://wenshu.court.gov.cn/ 想爬取搜索结果的统计信息,比如,搜索一个关键词,抓取左侧的年份,地域,案由筛选等等信息。 看了一些资料,反扒措施貌似很多,这样的需求应该不至于触发反扒措施吧


Python中如何爬取裁判文书网的搜索信息,有没有现成的轮子呢?
7 回复
import requests
import json
from typing import Dict, List, Optional
import time

class WenshuCrawler:
    """
    裁判文书网搜索信息爬取基础示例
    注意:实际使用需处理反爬机制(验证码、动态token等)
    """
    
    def __init__(self):
        self.session = requests.Session()
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
            'Referer': 'https://wenshu.court.gov.cn/'
        }
        
    def get_search_results(self, keyword: str, page: int = 1) -> Optional[Dict]:
        """
        搜索裁判文书
        :param keyword: 搜索关键词
        :param page: 页码
        :return: 搜索结果字典
        """
        # 实际URL和参数需要分析网站接口
        url = "https://wenshu.court.gov.cn/website/parse/rest.q4w"
        
        # 需要动态获取的参数(示例结构)
        params = {
            "page": page,
            "sortOrder": "",
            "param": json.dumps({
                "searchWord": keyword,
                "pageSize": 20,
                "sortFields": ""
            }, ensure_ascii=False)
        }
        
        try:
            # 实际需要添加cookies、token等认证信息
            response = self.session.post(
                url, 
                data=params, 
                headers=self.headers,
                timeout=10
            )
            response.raise_for_status()
            
            # 解析返回数据(实际结构需分析)
            data = response.json()
            return self._parse_results(data)
            
        except Exception as e:
            print(f"请求失败: {e}")
            return None
    
    def _parse_results(self, raw_data: Dict) -> Dict:
        """解析返回数据"""
        results = {
            'total': raw_data.get('totalCount', 0),
            'cases': []
        }
        
        # 解析文书列表(字段名需根据实际响应调整)
        for item in raw_data.get('result', []):
            case = {
                'case_id': item.get('案件ID'),
                'title': item.get('案件名称'),
                'court': item.get('法院'),
                'date': item.get('裁判日期'),
                'case_type': item.get('案件类型'),
                'url': f"https://wenshu.court.gov.cn/website/wenshu/{item.get('文书ID')}"
            }
            results['cases'].append(case)
        
        return results

# 使用示例
if __name__ == "__main__":
    crawler = WenshuCrawler()
    
    # 搜索测试
    results = crawler.get_search_results("民间借贷", page=1)
    
    if results:
        print(f"找到 {results['total']} 个结果")
        for i, case in enumerate(results['cases'][:3], 1):
            print(f"{i}. {case['title']}")
            print(f"   法院:{case['court']}")
            print(f"   日期:{case['date']}")
            print(f"   链接:{case['url']}\n")

关于现成轮子:

  1. 开源项目:GitHub上有一些相关项目,但大多已失效(网站改版/反爬升级)
  2. 主要难点
    • 动态加密参数(_VIEWSTATE、token等)
    • 验证码识别(点选、滑块等)
    • 请求频率限制和IP封禁
  3. 建议方案
    • 使用Selenium/Puppeteer模拟浏览器操作
    • 接入打码平台处理验证码
    • 合理设置延迟和代理池

总结:直接爬比较困难,建议先研究网站接口规律。

非常感谢哈。
有没有简单成型的,目前不需要爬下文档,只要个搜索之后的左边的统计信息就好了

github 上有很多写好的爬虫,试试能不能用?

ok,话说,如果爬上面的文档,用什么数据库存储比较好?

个人爬,量不多就一个表,就 mysql 呗。
用别人的代码,那就看代码用的是哪个库就用那个

python/scrapy
文件或者上数据库

回到顶部