前言
学了一天半的爬虫,真·从零开始,没想到那么快就实现了“汇法网”案件名称和发生地点的爬取,我也很惊讶~
本文章仅适合跟我一样的爬虫萌新!大佬轻喷!
附上我学习爬虫的慕课链接:嵩天老师:Python 网络爬虫与信息提取
分析思路
- 打开汇法网裁判文书页。由于我个人只需要搜集案件名称及其发生地点,恰好搜索页就有!就不需要访问详情页啦~(据同学测试,若爬取详情页的话,1k 条左右就会限制 ip 了)
- 翻页,观察汇法网网址变化:
https://www.lawxp.com/Case/?pg=【页码】&WriteType=-1
- 浏览器右键“查看源代码”,发现案件名称的格式是:title=”XXXXX”。
而发生地点我这里偷点懒~ 地点格式为:(XXXXX 人民法院)。 - 所以案件名称的正则表达式为:
r'title\=\"([^\"]*)一案 \"'
而发生地点的正则表达式为:r'\(.*? 人民法院'
,其后将切去 左半括号 和“人民法院”四个字。 - 以上就是核心啦~ 接下来就是代码框架了。代码的框架我参考的是嵩天老师“Python 网络爬虫与信息提取”课程的第三周第 8 单元:淘宝商品比价定向爬虫
源代码
#HUIFA.py
import requests
import re
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def parsePage(ilt, html):
try:
tit = re.findall(r'title\=\"([^\"]*)一案 \"',html)
pla = re.findall(r'\(.*? 人民法院',html)
for i in range(len(tit)):
title = tit[i]
place = re.split('[(人]',pla[i])[1]
ilt.append([title,place])
except:
print("")
def printGoodsList(ilt):
tplt = "{:4}\t{:16}\t{:32}"
print(tplt.format("序号","地点", "案件"))
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count, g[1], g[0]))
def main():
depth = 120 #爬取深度 / 页面数量
start_url = 'https://www.lawxp.com/Case/'
infoList = []
for i in range(depth):
try:
url = start_url + '?pg=' + str(i+1) + '&WriteType=-1'
html = getHTMLText(url)
parsePage(infoList, html)
print("第 {:4} 页 已完成".format(i+1))
except:
continue
printGoodsList(infoList)
main()
结语
“汇法网”的案件名称及其发生地点的爬取是我们校创项目的一部分。这是我第一次写爬虫,能写到这个程度自我感觉还不错!爬虫路漫漫,希望能给我这样的新手小白一些微不足道的参考!