Python编程让繁琐的工作自动化(6)-从web抓取信息

2024-05-06 20:08

本文主要是介绍Python编程让繁琐的工作自动化(6)-从web抓取信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

webbrowser:python自带的模块,打开浏览器获取指定页面
requests:从因特网上下载文件和网页
BeautifulSoup:解析HTML,即网页编写的格式
selenium:启动并控制一个Web浏览器,能够填写表单,并模拟鼠标在这个浏览器汇中点击

项目:利用 webbrowser 模块的 mapIt.py

webbrowser 模块的 open()函数可以启动一个新浏览器,打开指定的 URL。在交
互式环境中输入以下代码:

>>> import webbrowser 
>>> webbrowser.open('http://inventwithpython.com/') 

Web 浏览器的选项卡将打开 URL http://inventwithpython.com/。这大概就是
webbrowser 模块能做的唯一的事情。既使如此,open()函数确实让一些有趣的事情成为可
能。例如,将一条街道的地址拷贝到剪贴板,并在 Google 地图上打开它的地图,这是很
繁琐的事。你可以让这个任务减少几步,写一个简单的脚本,利用剪贴板中的内容在浏
览器中自动加载地图。这样,你只要将地址拷贝到剪贴板,运行该脚本,地图就会加载。
你的程序需要做到:
• 从命令行参数或剪贴板中取得街道地址。
• 打开 Web 浏览器,指向该地址的 Google 地图页面。
这意味着代码需要做下列事情:
• 从 sys.argv 读取命令行参数。
• 读取剪贴板内容。
• 调用 webbrowser.open()函数打开外部浏览器。
打开一个新的文件编辑器窗口,将它保存为 mapIt.py。

#你的目的是创建mapIt.py,然后使用命令行运行它时,如
C:\> mapit 870 Valencia St, San Francisco, CA 94110 
#该脚本将使用命令行参数,而不是剪贴板,如果没有命令行参数,程序就知道使用剪贴板的内容# 第1步:在mapIt.py中处理命令行参数
#! python3 
# mapIt.py - Launches a map in the browser using an address from the 
# command line or clipboard. import webbrowser, sys, pyperclip
if len(sys.argv) > 1: # Get address from command line. address = ' '.join(sys.argv[1:]) # 第2步:处理剪贴板,加载浏览器else: # Get address from clipboard. address = pyperclip.paste() webbrowser.open('https://www.google.com/maps/place/' + address) 

类似程序的想法

只要你有一个 URL,webbrowser 模块就让用户不必打开浏览器,而直接加载一
个网站。其他程序可以利用这项功能完成以下任务:
• 在独立的浏览器标签中,打开一个页面中的所有链接。
• 用浏览器打开本地天气的 URL。
• 打开你经常查看的几个社交网站。

利用requests模块从Web下载文件

requests 模块让你很容易从 Web 下载文件,不必担心一些复杂的问题,诸如网
络错误、连接问题和数据压缩。编写 requests 模块是因为 Python 的 urllib2 模块用起来太复杂。

常用函数:

# 下载一个网页
import requests 
# 返回一个response对象
>>> res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt') 
>>> type(res) 
<class 'requests.models.Response'> 
# 检查状态码判断是否成功,ok的状态码是200,404代表没找到
>>> res.status_code == requests.codes.ok 
True 
>>> len(res.text) 
178981 
>>> print(res.text[:250]) 
The Project Gutenberg EBook of Romeo and Juliet, by William Shakespeare This eBook is for the use of anyone anywhere at no cost and with 
almost no restrictions whatsoever. You may copy it, give it away or 
re-use it under the terms of the Proje # 检查错误
# 检查成功有一种简单的方法,就是在 Response对象上调用 raise_for_status()方法。如果下载文件出错,这将抛出异常。如果下载成功,就什么也不做
>>> res = requests.get('http://inventwithpython.com/page_that_does_not_exist') 
>>> res.raise_for_status() 
Traceback (most recent call last): File "<pyshell#138>", line 1, in <module> res.raise_for_status() File "C:\Python34\lib\site-packages\requests\models.py", line 773, in raise_for_status raise HTTPError(http_error_msg, response=self) 
requests.exceptions.HTTPError: 404 Client Error: Not Found 
# 利用try和except语句将raise_for_status代码行包裹起来,处理这一错误,不让程序崩溃
import requests 
res = requests.get('http://inventwithpython.com/page_that_does_not_exist') 
try: res.raise_for_status() 
except Exception as exc: print('There was a problem: %s' % (exc)) 
# 将下载的文件保存到硬盘
# 使用标准的open和write函数将web页面保存到硬盘的一个文件,但是必须用写二进制模式打开文件,即使页面是纯文本的,目的是保存该文本的unicode编码。
# 使用for循环和response对象iter_content方法
>>> import requests 
>>> res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt') 
>>> res.raise_for_status() 
>>> playFile = open('RomeoAndJuliet.txt', 'wb') 
# iter_content()方法在循环的每次迭代中,返回一段内容。每一段都是 bytes 数据类型,你需要指定一段包含多少字节。
# 10 万字节通常是不错的选择,所以将 100000作为参数传递给 iter_content()。 
>>> for chunk in res.iter_content(100000): playFile.write(chunk) # write()方法返回一个数字,表示写入文件的字节数。在前面的例子中,第一段包含 100000 个字节,文件剩下的部分只需要 78981 个字节。 100000 
78981 
>>> playFile.close() 

HTML

因为基本上用不到解析网页的东西,所以暂时不记录这一部分内容,有需要可以网上找爬虫教程!

这篇关于Python编程让繁琐的工作自动化(6)-从web抓取信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965251

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

Python海象运算符:=的具体实现

《Python海象运算符:=的具体实现》海象运算符又称​​赋值表达式,Python3.8后可用,其核心设计是在表达式内部完成变量赋值并返回该值,从而简化代码逻辑,下面就来详细的介绍一下如何使用,感兴趣... 目录简介​​条件判断优化循环控制简化​推导式高效计算​正则匹配与数据提取​性能对比简介海象运算符