Python数据分析小项目
项目结构
需求分析
用网络爬虫去无讼网站爬取电信网络诈骗一审案例。爬取内容:
-
案例编号
-
案例详情URL
-
案例名称(Title)
-
被告人基本信息:姓名、出生日期、籍贯
-
法院判决结果:罚款数、判决年限
-
法院所在地区
建立一个回归模型,分析判决年限受什么因素的影响
项目阶段分析
在本次项目中,需要完成从数据源到回归分析的一系列过程,将步骤划分为如下阶段:
- 编写爬虫程序,从无讼案例网抓取相关数据
- 编写数据清洗程序,将抓取下来的原始数据进行清洗
- 编写数据处理程序,将原始数据转换为数字的形式
- 编写回归分析程序,通过sklearn模块完成回归模型的构建
1. 爬虫阶段
分析
访问https://www.itslaw.com/home,输入电信网络诈骗。访问结果如下:
通过F12抓包,发现服务器向当前浏览器通过Ajax返回了一段Json数据,其中包含当前页面的所有信息
查看路径为https://www.itslaw.com/api/judgements?_timer=1592998113495&sortType=1&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&startIndex=0&countPerPage=20
尝试改变该url能否获取不同的信息:
发现通过改变startIndex的值可以指定当前浏览的页数,即完成加载更多的功能
解析该json字符串发现了一些有用的信息:
按照多次爬虫的经验,猜想这个id应该是访问该案件详情信息url的某个部分。所以接下来验证猜想。
进入详情页面来获取详细的信息。
通过F12抓包,发现服务器向当前浏览器通过Ajax返回了一段Json数据
该json的url为https://www.itslaw.com/api/judgements/detail?_timer=1592997701254&judgementId=c946665c-3d05-4044-ad64-a88b7044fc2c
重新抓取一个新的案例的详情页面请求
该json的url为https://www.itslaw.com/api/judgements/detail?_timer=1592997816911&judgementId=1e68789b-101d-458e-8116-73029c82c93f
发现该路径是由judgementId
来区分的,再通过访问案例首页可以获取到的这个judgementId
,所以可以总结我们的爬虫思路如下:
- 通过访问搜索结果页面,获取每个案例对应的
judgementId
- 通过拼接url,完成对每个案例的详情页面爬取
- 通过改变startIndex来切换搜索结果页面。完成对多个页面多个案例的爬取
代码实现
import requests
from lxml import etree
import time
import re
import csv
import threading
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
'referer': 'https://www.itslaw.com/search?initialization=%7B%22category%22%3A%22CASE%22%2C%22filterList%22%3A%5B%7B%22type%22%3A%22searchWord%22%2C%22id%22%3A%22%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C%E8%AF%88%E9%AA%97%22%2C%22searchType%22%3A1%2C%22label%22%3A%22%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C%E8%AF%88%E9%AA%97%22%2C%22category%22%3A%22%E6%90%9C%E7%B4%A2%E8%AF%8D%22%7D%5D%7D',
'cookie': 'home_sessionId=true; UM_distinctid=172ac09f5d0615-06776b04780