網址:
中國審判流程信息公開網: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')