人生苦短,我用python。
Python之爽,莫过爬虫。
建筑标准真是多如六毛,住建部网站公开发布的就有近千条。还好住建部将各类标准进行了公开发布,可免费下载。要是手工全部下载,也太lowB了,也是对自己的耐性是个极大的考验,光干这个枯燥的事怕是也要个三五天。
我会python我怕谁,写个爬虫半天全撸完,看着自动下载的上千的标准文件,想想都暗爽,说干就干。

一、网站分析

1.进入住建部官网http://www.mohurd.gov.cn/,进入标准定额,再进标准发布公告,记下网址http://www.mohurd.gov.cn/bzde/bzfbgg/index.html,这个就是我们要爬取的第一个页面内容。可以看到,公布的标准共有50页,每页有20条标准。点击下一页,网址变成http://www.mohurd.gov.cn/bzde/bzfbgg/index_2.html,你会发现每一页的链接地址就是在首页的地址后面加上’_n’,找到地址规律就为自动爬取奠定基础了。

2.然后随便找一页网页进行结构分析,要从中提取出下载链接的页面。在网页上点击鼠标右键,选择“检查”就可以看到网页的结构了,找到我们要提取的目标链接地址,分析一下是否存在规律。在这里不得不吐槽一下,这个网页结构写的,太无语了,所有节点属性连一个class属性都没有,整个网页也没一点CSS样式,这个水平就能交差,看来政府的钱真是好赚啊。因为网页毫无章法,给内容提取确实带来了一点困扰,不过总算找到一点规律,每个a标签里都有个target=_blank的属性,总算是可以进行简单提取了。这里也有坑,将在程序中注明。

3.点击进入下载页面,进一步分析下载页面的网页结构。通过网页检查查看网页html结构,好歹这个页面的a标签的上一级有一个class=”attlink”的属性,这个提取下载链接就轻松多了,通过程序提取下载链接和文件名,就可以自动下载和保存文件了。这里也有坑,你会发现下载链接的写法根本不一致。

二、python程序实现

1.环境准备
IDE:pycharm
发送请求:requests模块
网页解析:beautifulsoup, re模块
2.获取网页html

def get_html(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)}response = requests.get(url, headers=headers)response.encoding = response.apparent_encodinghtml = response.textreturn html

3.获取总页数

def get_total_page(url):html = get_html(url)total_page = re.findall('共(\d*?)页', html)[0]
return int(total_page)

4.获取单页下载页链接

def get_links(url):links = []html = get_html(url)soup = BeautifulSoup(html, 'html.parser')select_result = soup.find_all('a', attrs={"target":"_blank"})result = select_result[:-2]for item in result:links.append(item['href'])return links

5.获取所有下载页链接

def get_all_links(total_page):all_links = []for i in range(total_page):if i == 0:url = url_base + '.html'else:url = url_base + '_' + str(i + 1) + '.html'links = get_links(url)all_links = all_links + linksprint('正在获取第{}页链接...'.format(i+1))return all_links

6.获取下载文件地址和文件名

def get_file_link(links):file_links = []i = 0for link in links:i+=1print('正在获取第%d个标准下载链接...'%(i))print(link)html = get_html(link)soup = BeautifulSoup(html, 'html.parser')select_result = soup.select('.attlink > a')if len(select_result)>0:result = select_result[0]link_temp = result['href']if re.search('download', link_temp):file_link = link_tempelse:file_link = 'http://www.mohurd.gov.cn' + link_tempfile_name = result.text + '.pdf'file_links.append([file_link, file_name])time.sleep(0.5)return file_links

7.下载和保存文件

def save_file(file_links):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)}i = 0for link in file_links:i += 1print('正在下载第%d个标准...'%(i))response = requests.get(link[0], headers=headers)file_content = response.contentf = open(link[1], 'wb')f.write(file_content)time.sleep(0.5)

三、避坑与小结

1.用target=_blank属性提取下载页面地址时,会有网站底部信息链接一同被提取出来,要进行二次筛选。
2.提取到的文件下载地址,有的是相对地址,这时需要进行补全,有的是绝对地址,这时直接保存即可。
3.有些公告下面没有附下载文件,是提取不到下载链接的,要注意跳过。

文件下载还是要费一定周期的,一定要处理好各种意外,以免程序中断又全部重来。处理规避好各种坑之后,就可以蹭蹭下载了,看到满屏的白嫖文件,确实有点神清气爽、洋洋得意啊。

建筑标准何其之多,python爬虫半天全梭相关推荐

  1. python 异步协程爬虫-半次元图片

    python 异步协程爬虫-半次元图片 1. 页面分析 2.代码大体构思 3.源码分析 3.1 完成效果 4.异步协程的优势 5.难点分析 6.可扩展性 欢迎私信或评论区交流 爬取网址 : https ...

  2. python爬虫招聘-Python爬虫抓取智联招聘(基础版)

    原标题:Python爬虫抓取智联招聘(基础版) 作者:C与Python实战 「若你有原创文章想与大家分享,欢迎投稿.」 对于每个上班族来说,总要经历几次换工作,如何在网上挑到心仪的工作?如何提前为心仪 ...

  3. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  4. python 爬虫系统_实战干货:从零快速搭建自己的爬虫系统

    近期由于工作原因,需要一些数据来辅助业务决策,又无法通过外部合作获取,所以使用到了爬虫抓取相关的数据后,进行分析统计.在这个过程中,也看到很多同学爬虫相关的文章,对基础知识和所用到的技术分析得很到位, ...

  5. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  6. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  7. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  8. qq纵横四海源码_【0基础】纵横中文网python爬虫实战

    原文在此~ [0基础]纵横中文网python爬虫实战​mp.weixin.qq.com 大家好,我是你们的机房老哥! 在粉丝群的日常交流中,爬虫是比较常见的话题.python最强大的功能之一也是爬虫. ...

  9. python爬虫网易云音乐最热评论并分析_Python3实现爬虫抓取网易云音乐的热门评论分析(图)...

    这篇文章主要给大家介绍了关于Python3实战之爬虫抓取网易云音乐热评的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...

最新文章

  1. iPhone销售增长50%,净利润增长93%,但苹果股价还是跌了
  2. HDU2112(SPFA算法)
  3. 【Android 插件化】插件化技术弊端 ( 恶意插件化程序的解决方向 | 常用的插件化虚拟引擎 )
  4. 单核工作法18:简化协作(下)
  5. 89600 matlab,是德KEYSIGHT N9000B CXA 信号分析仪,多点触控,9 kHz 至 26.5 GHz
  6. C语言高级编程:深入理解const
  7. 用CSS3来代替JS实现交互
  8. JAVA之运算符优先级
  9. 一天学一个模式_第一天:策略模式
  10. php引用计数器,PHP 引用计数器 通俗版解释_PHP教程
  11. tx2 fpga pcie无法读写_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解
  12. Adobe reader 在打开时如何恢复上一次阅读位置
  13. 45本数据分析、Python的书籍,包邮送到家
  14. kettle在linux定时任务_linux环境下kettle部署(JDK安装配置,kettle安装配置,资源库配置,定时执行job)...
  15. 计算机ppt咋弄,ppt打不开怎么办?教您详细解决方法
  16. JVM-GC日志分析
  17. 一起来学linux:网络命令
  18. 树莓派安装FISCO-BCOS
  19. 【数据处理】PS动作功能(附:下雨效果)
  20. 弘辽科技:拼多多专属推广怎么设置时间。

热门文章

  1. 计算机同一优盘记录,怎么查看电脑插过U盘的记录
  2. NFT艺术品交易平台有哪些?
  3. CMDN Club #19: Windows 8 Dev BootCamp - Win8开发知识与产品实践
  4. 【ZYNQ】中断机制介绍(一)
  5. Redirect组件的使用
  6. 判断点集与多边形的位置关系
  7. PTA 1031 查验身份证 (c语言)
  8. logstash 数据重复问题
  9. 深度学习和并行化实现
  10. 租用云主机可以做什么用?