博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫项目-人大法律文件
阅读量:2578 次
发布时间:2019-05-11

本文共 3329 字,大约阅读时间需要 11 分钟。

写在前面的话:

爬虫是一个高效的信息收集手段,但同时其对服务器也会造成一定的负担,因此希望在设计爬虫脚本时,希望大家有意的增加爬虫时间间隔,维护一个良好的网络环境。

这个项目是我自己的百度AI Studio上的项目,目的是想要自己做数据库,进行法律文件的实时查询。

项目思路:

1.引用相关的包:bs4(用于规范化html文件)、urllib(用于访问服务器)、time(用于添加各种时间和等待)

2.定义文件保存函数:包含错误信息保存(用于查看哪个法律文件没有保存)、保存文件列表、保存文件。

3.获取法律文件列表,并保存

4.依据法律文件列表获取法律文件内容,并保存

项目代码:

1.引用所需要的库:

from bs4 import BeautifulSoupfrom urllib import requestimport time

2.定义保存相关信息的函数

# 保存页面读取错误信息def save_ErrorData(str_error):    with open('save/record.txt',mode='a') as file:        file.write(str_error)# 保存文件名称集合def save_FileNames(str_FileName):    with open('save/filenames.txt',mode='a') as file:        file.write(str_FileName)# 保存相关文件内容def save_File(str_FileName,str_FileData):    with open('save/'+str_FileName+'.txt',mode='w',encoding='utf-8') as file:        file.write(str_FileData)

3.定义被爬取网站的基础网址

str_URL_base='http://www.npc.gov.cn/'

4.爬取第一个页面,主要用于测试代码

str_URL='http://www.npc.gov.cn/npc/c12488/list.shtml'req = request.Request(url=str_URL)print(req)res = request.urlopen(req).read()soup=BeautifulSoup(res,'html.parser')# print(soup)soup_clist=soup.find_all(name='ul',class_='clist')print('-----------------------------------------------------')# print(soup_clist)if(soup_clist==[]):    save_ErrorData('not save layer no:'+str(0)+'\n')    print('error occured:0')else:    for temp in soup_clist:        soup_clist_a=temp.find_all(name='a')        for temp_1 in soup_clist_a:            print(temp_1['href'],temp_1.string)            save_FileNames(temp_1.string+'---'+'http://www.npc.gov.cn'+temp_1['href']+'\n')

5.爬取其他法律列表页面,获取所有法律文件标题和URL。一定要添加time.sleep(),已减小服务器负担。

for i in range(2,16,1):    temp_strURL='http://www.npc.gov.cn/npc/c12488/list_'+str(i)+'.shtml'    req = request.Request(url=temp_strURL)    res = request.urlopen(req).read()    soup = BeautifulSoup(res, 'html.parser')    soup_clist = soup.find_all(name='ul', class_='clist')    # print(soup_clist)    if (soup_clist == []):        save_ErrorData('not save layer no:' + str(0) + '\n')        print('error occured:'+str(i))    else:        for temp in soup_clist:            soup_clist_a = temp.find_all(name='a')            for temp_1 in soup_clist_a:                print(temp_1['href'], temp_1.string)                save_FileNames(temp_1.string + '---' + 'http://www.npc.gov.cn/' + temp_1['href'] + '\n')    time.sleep(3)  #睡眠3秒,以防过度爬取导致他人访问网站堵塞

6.访问各个法律文件所在网址,保存各个法律文件。一定要添加time.sleep(),已减小服务器负担。

with open('save/filenames.txt','r',encoding='utf-8') as file_temp:    info_list=file_temp.readlines()    # print(info_list)    for info_temp in info_list:        name,url=info_temp.split('---')        print(name,url)        try:            req = request.Request(url=url)            res = request.urlopen(req).read()            soup=BeautifulSoup(res,'html.parser')            # print(soup)            div=soup.find('div',id='Zoom')            # print(div)        except BaseException as e:            print('error occur:', e)            save_ErrorData(time.strftime('%Y%m%d%H%M%S') + '未获取文件:' + name + '。error detail:' + str(e) + '\n')        try:            str_content=div.get_text()            # print(str_content)            save_File(name,str_content)        except BaseException as e:            print('error occur:',e)            save_ErrorData(time.strftime('%Y%m%d%H%M%S')+'未获取文件:'+name+'。error detail:'+str(e)+'\n')        time.sleep(2)

 

转载地址:http://vszfd.baihongyu.com/

你可能感兴趣的文章
adreno630gpu参数_小米8搭载Adreno 630图形处理器 比荣耀play上的GPU Turbo更成熟
查看>>
带bitlocker解密的pe_如何在PE下解锁bitlocker
查看>>
lj245a引脚功能图_谁找到74254,74LS245芯片引脚的功能和功能图啊?
查看>>
sts 创建webservice项目_通过eclipse将Java生成webservice | 学步园
查看>>
python数字字符串和数字相加_数字和字符串
查看>>
python风控模型举例_一文搞定风控模型6大核心指标(附代码)
查看>>
java arraylist 写入文件_java-将自定义对象的ArrayList写入文件
查看>>
ice glacier2 java_ICE提纲之demo/Glacier2/callback(跨网回调)
查看>>
java 转发上传文件_java 后台请求其他接口转发文件
查看>>
Java get set 同步_java – getResultSet()“每个结果只能调用一次”
查看>>
java jmx 配置_为什么在配置JMX时Java打开3个端口?
查看>>
java thread回调_使用Runnable在Java中实现回调
查看>>
java 内存区_Java内存模型和Java内存区域的区别和联系?
查看>>
java定时任务监控_Spring定时任务使用及如何使用邮件监控服务器
查看>>
java crc32 使用_Java CRC32的用法
查看>>
java读取unicode_java怎么样将unicode解码读取?Java读取本地文件进
查看>>
java.io.file()_Java File getUsableSpace()方法
查看>>
java httpclient 工具_spring整合httpClient工具类
查看>>
java监控其他服务器运行状态_windows服务器监控多个tomcat运行状态
查看>>
java给学生按总成绩排名_java - 输入学生成绩,取它们的平均值,然后通过排名等级的学生 - SO中文参考 - www.soinside.com...
查看>>