博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
ExecutorService 线程池 newFixedThreadPool newSingleThreadExecutor newCachedThreadPool
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
常用的正则表达式
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
ie8 加载不到js 报SCRIPT1028: 缺少标识符、字符串或数字 ;SCRIPT5009: “anorectaSearch”未定义
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之备忘录模式(Memento)
查看>>
行为型模式之观察者模式(Observer)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>