本文共 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/