从Web抓取信息
来源:python编程快速上手——Al Sweigart
webbrowser:是 Python 自带的,打开浏览器获取指定页面。
requests:从因特网上下载文件和网页。
Beautiful Soup:解析 HTML,即网页编写的格式。
selenium:启动并控制一个 Web 浏览器。 selenium 能够填写表单,并模拟鼠标在这个浏览器中点击。
1 利用 Webbrowser 模块
webbrowser 模块的 open()函数可以启动一个新浏览器,打开指定的 URL。 Web 浏览器的选项卡将打开 URL http://inventwithpython.com/。这大概就是webbrowser 模块能做的唯一的事情。
建立以下程序:
• 从 sys.argv 读取命令行参数。
• 读取剪贴板内容。
• 调用 webbrowser.open()函数打开外部浏览器
- import webbrowser, sys, pyperclip
- if len(sys.argv) > :
- # Get address from command line.
- address = ' '.join(sys.argv[:])
- else:
- # Get address from clipboard.
- address = pyperclip.paste()
- webbrowser.open('https://www.google.com/maps/place/' + address)
2 利用 Requests 模块
requests.get()函数接受一个要下载的 URL 字符串。通过在 requests.get()的返回值上调用 type(),你可以看到它返回一个 Response 对象,其中包含了 Web 服务器对你的请求做出的响应。
- >>>import requests
- >>>res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
- >>>type(res)
- <class 'requests.models.Response'>
- >>>res.status_code == requests.codes.ok
- True
- >>> len(res.text)
- >>> print(res.text[:])
- 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 对象有一个 status_code 属性,可以检查它是否等于requests.codes.ok,了解下载是否成功。检查成功有一种简单的方法,就是在 Response对象上调用 raise_for_status()方法。如果下载文件出错,这将抛出异常。如果下载成功,就什么也不做。
保存文件:
1.调用 requests.get()下载该文件。
2.用'wb'调用 open(),以写二进制的方式打开一个新文件。
3.利用 Respose 对象的 iter_content()方法做循环。
4.在每次迭代中调用 write(),将内容写入该文件。
5.调用 close()关闭该文件。
3 利用 BeautifulSoup 模块
BeautifulSoup是一个模块,用于从HTML页面中提取信息(用于这个目的时,它比正则表达式好很多)。 BeautifulSoup模块的名称是bs4(表示 BeautifulSoup,第4版)。
创建对象:
利用 requests.get()函数
- >>> import requests, bs4
- >>> res = requests.get('http://nostarch.com')
- >>> res.raise_for_status()
- >>> noStarchSoup = bs4.BeautifulSoup(res.text)
- >>> type(noStarchSoup)
- <class 'bs4.BeautifulSoup'>
传递一个 File 对象
- >>> exampleFile = open('example.html')
- >>> exampleSoup = bs4.BeautifulSoup(exampleFile)
- >>> type(exampleSoup)
- <class 'bs4.BeautifulSoup'>
用 select()方法寻找元素
传递给 select()方法的选择器 | 将匹配… |
soup.select('div') | 所有名为<div>的元素 |
soup.select('#author') | 带有 id 属性为 author 的元素 |
soup.select('.notice') | 所有使用 CSS class 属性名为 notice 的元素 |
soup.select('div span') | 所有在<div>元素之内的<span>元素 |
soup.select('div > span') | 所有直接在<div>元素之内的<span>元素, 中间没有其他元素 |
soup.select('input[name]') | 所有名为<input>,并有一个 name 属性,其值无所谓的元素 |
soup.select('input[type="button"]') | 所有名为<input>,并有一个 type 属性,其值为 button 的元素 |
Ex:
- #!example.html
<!-- This is the example.html example file. -->- <html><head><title>The Website Title</title></head>
- <body>
- <p>Download my <strong>Python</strong> book from <a href="http://
- inventwithpython.com">my website</a>.</p>
- <p class="slogan">Learn Python the easy way!</p>
- <p>By <span id="author">Al Sweigart</span></p>
- </body></html>
- >>> import bs4
- >>> exampleFile = open('example.html')
- >>> exampleSoup = bs4.BeautifulSoup(exampleFile.read())
- >>> elems = exampleSoup.select('#author')
- >>> type(elems)
- <class 'list'>
- >>> len(elems)
- >>> type(elems[])
- <class 'bs4.element.Tag'>
- >>> elems[].getText()
- 'Al Sweigart'
- >>> str(elems[])
- '<span id="author">Al Sweigart</span>'
- >>> elems[].attrs
- {'id': 'author'}
通过元素的属性获取数据
- >>> import bs4
- >>> soup = bs4.BeautifulSoup(open('example.html'))
- >>> spanElem = soup.select('span')[]
- >>> str(spanElem)
- '<span id="author">Al Sweigart</span>'
- >>> spanElem.get('id')
- 'author'
- >>> spanElem.get('some_nonexistent_addr') == None
- True
- >>> spanElem.attrs
- {'id': 'author'}
从Web抓取信息的更多相关文章
- 从Web抓取信息的几个常用方法
1.Response 对象有一个 status_code 属性,可以检查它是否等于requests.codes.ok. 2.raise_for_status()方法是一种很好的方式,确保程序在下载失败 ...
- 如何用 Python 实现 Web 抓取?
[编者按]本文作者为 Blog Bowl 联合创始人 Shaumik Daityari,主要介绍 Web 抓取技术的基本实现原理和方法.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正 ...
- python Web抓取(一)[没写完]
需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...
- php多线程抓取信息测试例子
php多线程抓取信息测试例子 PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. PHP扩展下载:htt ...
- java练习题(字符串类):显示4位验证码、输出年月日、从XML中抓取信息
1.显示4位验证码 注:大小写字母.数字混合 public static void main(String[] args) { String s="abcdefghijklmnopqrstu ...
- python自动化之web抓取
''' 从web抓取数据: webbrowser:是python自带的,打开浏览器获取指定页面. requests:从因特网上下载文件和网页. Beautiful Soup:解析HTML,即网页编写的 ...
- 调用 CURL 使用正则抓取信息
Class MyCurl{ protected $_pdo; //构造方法 链接数据库 public function __construct(){ $this->_pdo ...
- 网页抓取信息(php正則表達式、php操作excel)
1.问题描写叙述 实现对固定网页上自己须要的信息抓取,以表格形式存储. 我是拿wustoj上的一个排行榜来练习的,地址:wustoj 2.思路 网页自己就简单学习了一下php,刚好用它来做点事情吧,我 ...
- java做web抓取
就像许多现代科技一样,从网站提取信息这一功能也有多个框架可以选择.最流行的有JSoup.HTMLUnit和Selenium WebDriver.我们这篇文章讨论JSoup.JSoup是个开源项目,提供 ...
随机推荐
- 【洛谷】【动态规划/背包】P1417 烹调方案
由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的食物准备填 ...
- django CBV模式下如何去掉csrf验证
方式一:from django.views.decorators.csrf import csrf_exemptfrom django.utils.decorators import method_d ...
- Day1 Mybatis初识(一)
框架 将重复的,繁琐的代码实现封装,让程序员将更多的精力放在业务的理解和分析上. 框架的作用 提高开发效率 隐藏细节 三大框架SSH --> SSM 1) 表述层: 用户 ...
- programming-languages学习笔记--第9部分
programming-languages学习笔记–第9部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...
- 《信息安全技术》实验一 PGP的原理与使用
<信息安全技术>实验一 PGP的原理与使用(macOS High Sierra下实现) 实验目的 理解传统加密.公钥加密.混合加密.数字签名等概念 理解公钥.私钥.会话密钥.对称密钥等概念 ...
- vmvare安装系统提示vmci.sys 版本不正确解决方法
无法获取vmci驱动程序版本:参数不正确解决 无法获取vmci驱动程序版本:参数不正确. 驱动程序vmci.sys版本不正确. 解决办法: 1,创建好虚拟机之后,别打开电源,然后到建好的虚拟机文件夹里 ...
- centos下Zabbix Agent端部署和安装
首先重复一下前面的规划 server端: 192.168.136.144 centos6.5 (虚拟机) agent端: 192.168.136.155 centos6.5( 虚拟 ...
- 你都用python来做什么?
首页发现话题 提问 你都用 Python 来做什么? 关注问题写回答 编程语言 Python 编程 Python 入门 Python 开发 你都用 Python 来做什么? 发现很 ...
- #leetcode刷题之路50-Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数.示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100 #inclu ...
- DML-插入
插入的方式一: 语法: insert into 表名(字段)values(值); 特点: 1.要求表明括号里的属性和values括号里的属性一致或兼容 2.字段的个数和顺序不一定与原始表中的字段个数和 ...