提取審判信息網公開信息,導入數據庫或存爲文件

網址:
中國審判流程信息公開網:https://splcgk.court.gov.cn/gzfwww/

1.導入數據庫

import requests  #數據抓取模塊
from parsel import Selector  #標籤解析模塊
import pymysql  #數據庫模塊
import html  #網頁解析模塊
import re  #正則
import json  #jason模塊

# 連接數據庫及建表函數
def create():
    connect = pymysql.connect(host="127.0.0.1",             #數據庫地址,一般爲127.0.0.1或者localhost
                              port=3306,                    #數據庫端口
                              user={databaseaccount},       #數據庫賬戶
                              password={password},          #數據庫密碼
                              database={databasename},      #數據庫名稱
                              charset="utf8")               #數據庫字符集,可略去
    cursor = connect.cursor() #創建遊標對象cursor
    cursor.execute("drop table if exists law_list") #使用 execute() 方法執行 SQL,若同名表存在則刪除
    sql = """ create table law_list(
                     id            int          not null auto_increment primary key comment '序號',
                     case_id       varchar(255) not null comment 'cBh 案件編碼',
                     case_num      varchar(255) not null comment 'cBt 案件編號',
                     case_name     varchar(255) not null comment 'cFymc 案件標題',
                     case_date     date         not null comment 'dtUpdatetime 案件時間',
                     case_url      varchar(255) not null comment '案件網址',
                     case_text     longtext     not null comment '案件內容'
                   ) engine=InnoDB default charset=utf8""" #建表
    cursor.execute(sql) #執行語句
    connect.close() #關閉連接


# 插入數據函數
def insert(value):
    connect = pymysql.connect(host='127.0.0.1',
                              port=3306,
                              user={databaseaccount},
                              password={databaseaccount},
                              database={databasename},
                              charset='utf8') #連接數據庫,同上
    cursor = connect.cursor() #創建遊標對象cursor
    sql = 'insert into law_list (case_id,case_num,case_name,case_date,case_url,case_text) values(%s,%s,%s,%s,%s,%s)' #創建插入數據封裝
    try:
        cursor.execute(sql, value) #插入數據函數
        connect.commit() #確保運行
        print('插入數據成功')
    except:
        connect.rollback() #數據操作回滾
        print("插入數據失敗")
    connect.close()


create() #建表

# 抓取數據
for pageNum in range(1, 8):
    ses = requests.session() #抓取數據
    ses.headers.update({"Origin": "https://splcgk.court.gov.cn"}) #更新請求headers
    url_main = 'https://splcgk.court.gov.cn/gzfwww//qwallist' #url
    data = {'fbdw': '最高人民法院', 'bt': '', 'lx': 'lzdx', 'pageNum': str(pageNum)} #請求函數
    res = ses.post(url_main, data=data, timeout=(60, 60)) #post請求函數
    if res.status_code == 200: #是否正常抓取
        print('網頁正常採集')
    else:
        print('網頁採集失敗')
    result = res.text #獲取文本
    result = json.loads(result) #返回字典格式
    law_list = result['list'] #獲取字典意向信息

    #遍歷字段並轉碼
    for content in law_list:
        case_id = html.unescape(content['cBh'])
        case_num = html.unescape(content['cBt'])
        case_name = html.unescape(content['cFymc'])
        case_date = content['dtUpdatetime']
        url_case = 'https://splcgk.court.gov.cn/gzfwww//qwal/qwalDetails?id='
        case_url = url_case + case_id #拼接代碼

        #提取網頁內容
        res_text = requests.get(case_url) #抓取網頁正文
        sel = Selector(text=res_text.text) #獲取文本信息
        for x in sel.css('.fd-fix'): #正則剔除不必要信息
            text_result = x.css('span::text').getall()
            text_result = ''.join(text_result)
            case_text = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", text_result)

        value = (case_id, case_num, case_name, case_date, case_url, case_text) #函數列表
        insert(value)#插入數據

2.存爲文件

import requests  #數據抓取模塊
from parsel import Selector  #標籤解析模塊
import html  #網頁解析模塊
import re  #正則
import json  #jason模塊
import time #時間模塊

lines = [] #集合
time.sleep(5)

# 抓取數據
for pageNum in range(1, 8):
    ses = requests.session() #抓取數據
    ses.headers.update({"Origin": "https://splcgk.court.gov.cn"}) #更新請求headers
    url_main = 'https://splcgk.court.gov.cn/gzfwww//qwallist' #url
    data = {'fbdw': '最高人民法院', 'bt': '', 'lx': 'lzdx', 'pageNum': str(pageNum)} #請求函數
    res = ses.post(url_main, data=data, timeout=(60, 60)) #post請求函數
    if res.status_code == 200: #是否正常抓取
        print('網頁正常採集')
    else:
        print('網頁採集失敗')
    result = res.text #獲取文本
    result = json.loads(result) #返回字典格式
    law_list = result['list'] #獲取字典意向信息

    #存儲數據
    for content in law_list:
        case_id = html.unescape(content['cBh'])
        case_num = html.unescape(content['cBt'])
        case_name = html.unescape(content['cFymc'])
        case_date = content['dtUpdatetime']
        url_case = 'https://splcgk.court.gov.cn/gzfwww//qwal/qwalDetails?id='
        case_url = url_case + case_id

        res_text = requests.get(case_url)
        sel = Selector(text=res_text.text)
        for x in sel.css('.fd-fix'):
            text_result = x.css('span::text').getall()
            text_result = ''.join(text_result)
            case_text = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", text_result)
            case_url = url_case + case_id #拼接代碼

            #提取網頁內容
            res_text = requests.get(case_url) #抓取網頁正文
            sel = Selector(text=res_text.text) #獲取文本信息
            for x in sel.css('.fd-fix'): #正則剔除不必要信息
                text_result = x.css('span::text').getall()
                text_result = ''.join(text_result)
                case_text = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", text_result)          
                
        lines.append('%s,%s,%s,%s,%s,%s' % (case_id, case_num, case_name, case_date, case_url, case_text)) #集合數據封裝
print("lines", lines) #打印集合數據
    
#保存數據
with open('law_list.csv', 'w') as f:
    for line in lines:
        f.write(line)
        f.write('\n')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章