python爬取无讼案例网,并对爬取结果进行多元回归分析

(求客官动动您的小指头,点个赞!!!)感谢感谢!!!

无讼网站数据爬取

(求客官动动您的小指头,点个赞!!!)

无讼网站爬取的主要步骤如下:

1.找到翻页后的url参数变化规律
2.从翻页后的页面中提取每个案例对应的参数值
3.将提取出来的参数值利用for循环构造1000个案例对应的url
4.使用requests库访问每个案例对应的url
5.利用json和re解析库提取所需要的信息
6.最后将数据保存在csv文件

遇到的问题

不能全部使用json来解析响应体,虽然网站返回的是json格式的数据,但是由于每个案例返回的json格式有一些不同,会很容易报错,若是用try-except异常处理跳过出错的案例,会使最后爬取的案例数量只有200多个,远远不能满足数量要求。所以本程序使用json配合re来提取所需信息,将格式比较统一的标题、案件类型、案例号、检察院名字、被告人姓名使用json库来获取。之后关于被告人的具体信息使用re正则表达式来获取,由于正则提取过程会导致一些数据提取不符合要求, 所以会对之后的多元线性回归的结果产生影响,这也是正则的缺点之一,提取的内容并不一定都能符合要求。

代码如下

# coding:utf-8
import re
import requests
import xlwt
import time
import numpy as np
import json


def get_pages(j):
    """
    不断获取翻页后的源代码(每页源代码包含20案例url需要的参数值)
    :param j: 翻页参数
    :return: 每页的源代码
    """
    head = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
        "Cookie": "UM_distinctid=172ad1c13215a5-096f2b20b21719-5d462912-144000-172ad1c1322982;home_sessionId=true; subSiteCode=bj;cookie_allowed=true;reborn-userToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxODk5NjA1MzI2NCJ9.UoDVvWzLxlyz_Qz6sJ6_FrW3EJWHRbvMCMJuuzcxglA;CNZZDATA1278721950=371480104-1592040232-https%253A%252F%252Fwww.baidu.com%252F%7C1592043421",
    }
    url = "https://www.itslaw.com/api/judgements?_timer=1592904610377&sortType=1&startIndex=" + str(
        j) + "&countPerPage=20&conditions=searchWord%2B%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C%E8%AF%88%E9%AA%97%2B1%2B%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C%E8%AF%88%E9%AA%97&conditions=trialRound%2B1%2B8%2B%E4%B8%80%E5%AE%A1"
    response = requests.get(url, headers=head).text
    # print(response)
    return response


def get_source():
    '''
    提取参数,拼接url,保存url到csv文件
    :return: url列表
    '''
    # 构造每个案例的url
    i = 0
    url_list = []
    for j in range(20, 5000, 20):
        response = get_pages(j)
        time.sleep(1)
        parameters = re.findall('"temporarySearchReport":false}.*?{"id":"(.*?)","title":"(.*?)","caseType', response,
                                re.S)  # 正则提取参数
        for parameter in parameters:
            i += 1
            url = "https://www.itslaw.com/api/judgements/detail?_timer=1592057292299&judgementId=%s" % parameter[0]
            print("第%s个url" % i, url)
            url_list.append(url)
        save_data("url.csv", url_list)
    print("总共获取了%s个url" % len(url_list))
    return url_list


def save_data(file_name, datas, rowx=0, colx=0):
    """
    保存数据,只能保存一维列表或是二维列表。
    :param file_name: 保存为的文件名,需要带后缀
    :param datas: 以列表形式提供要保存的数据
    :param rowx: 行号
    :param colx: 列号
    :return: None
    """
    if np.ndim(datas) == 1:
        # 纵向保存一位列表
        writebook = xlwt.Workbook(file_name)
        sheet = writebook.add_sheet("result", cell_overwrite_ok=True)
        for data in datas:
            # print(data)
            sheet.col(0).width = 35000  # 设置列宽
            sheet.write(rowx, colx, data)
            rowx += 1
        writebook.save(file_name)
        print("数据保存完成!")
    elif np.ndim(datas) == 2:
        # 保存二维列表
        writebook = xlwt.Workbook(file_name)
        sheet = writebook.add_sheet("信息", cell_overwrite_ok=True)
        rowx = 0
        for a in datas:
            rowx += 1
            colx = 0
            x = 0
            y = [25000, 3500, 8000, 5000, 5000, 5500, 4000, 5000, 5000, 3000, 3000, 3000, 3000, 3000]  # 列数变多,需要加数
            for infor in a:
                # print(data)
                sheet.col(colx).width = y[x]  # 设置不同的列宽
                sheet.write(rowx, colx, infor)
                colx += 1
                x += 1
        writebook.save(file_name)
        print("数据保存完成!")
    else:
        print("保存的数据既不是一维列表,也不是二维列表,不能保存!")

def get_oneurl_response():
    url_list = get_source()
    head = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
        "Cookie": "UM_distinctid=172ad1c13215a5-096f2b20b21719-5d462912-144000-172ad1c1322982;home_sessionId=true; subSiteCode=bj;cookie_allowed=true;reborn-userToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxODk5NjA1MzI2NCJ9.UoDVvWzLxlyz_Qz6sJ6_FrW3EJWHRbvMCMJuuzcxglA;CNZZDATA1278721950=371480104-1592040232-https%253A%252F%252Fwww.baidu.com%252F%7C1592043421",
    }
    all = []  # 二维列表,子列表存储每个案例提取的信息
    all.append(["标题", "案件类型", "案件号",  "检察院名字", "被告人姓名",
                "出生日期", "出生城市", "文化", "工作","判处年限","罚金"])
    all.append(["", "", "", "", "", "", "", "", "", "", ""])
    for url in url_list:
        try:
            print(url)
            r = requests.get(url, headers=head).text
            res = json.loads(r)
            dict_data 
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值