Python for Infomatics 第12章 网络编程四(译)

注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。

12.7 用BeautifulSoup分析HTML

  有很多Python库可以帮你分析HTML和抓取数据。每个库都有它们各自的强项和弱点,你可以基于你的需求选择一个。

  下面的例子,我们将使用BeautifulSoup来分析一些HTML的输入,并抓取链接信息。你可以从www.crummy.com下载和安装BeautifulSoup代码。你可以在下载后安装它,或者简单的把BeautifulSoup.py文件放到和你应用程序同样的目录下。(译者选择的另一种安装方法:pip3 install BeautiflSoup4)

  虽然HTML看起来像XML,一些页面还是仔细构建的XML。很多HTML的分析因为不正确格式引起XML分析器拒绝整个网页而中断。BeautifulSoup可以容忍有严重缺陷的HTML,还可以让你轻松提取你所需要的数据。我们将用urllib读取网页,然后使用BeautifulSoup抓取锚标签(a)的href属性。

  具体的代码如下:

from bs4 import BeautifulSoup
import urllib.request

url = input(‘Enter - ‘)
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html,"html.parser")
tags = soup(‘a‘)
for tag in tags:
    print(tag.get(‘href‘, None))

  程序提示输入一个网页地址,然后打开这个网页,读取数据,并将数据传送给BeautifulSoup分析器,然后获取所有锚标签(a)的内容,打印出每个标签的属性。

  程序运行后的输出如下:

Enter - http://www.py4inf.com/book.htm
http://amzn.to/1KkULF3
http://amzn.to/1KkULF3
http://amzn.to/1hLcoBy
http://amzn.to/1KkV42z
http://amzn.to/1fNOnbd
http://amzn.to/1N74xLt
http://do1.dr-chuck.net/py4inf/EN-us/book.pdf
http://do1.dr-chuck.net/py4inf/ES-es/book.pdf
https://twitter.com/fertardio
translations/KO/book_009_ko.pdf
http://www.xwmooc.net/python/
http://fanwscu.gitbooks.io/py4inf-zh-cn/
book_270.epub
translations/ES/book_272_es4.epub
https://www.gitbook.com/download/epub/book/fanwscu/py4inf-zh-cn
html-270/
html_270.zip
http://itunes.apple.com/us/book/python-for-informatics/id554638579?mt=13
http://www-personal.umich.edu/~csev/books/py4inf/ibooks//python_for_informatics.ibooks
http://www.py4inf.com/code
http://www.greenteapress.com/thinkpython/thinkCSpy/
http://allendowney.com/

  你可以用BeautifulSoup 拉出每个标签的不同部分,具体代码如下:

from bs4 import BeautifulSoup
import urllib.request

url = input(‘Enter - ‘)
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html,"html.parser")
tags = soup(‘a‘)
for tag in tags:
    print(‘TAG:‘, tag)
    print(‘URL:‘, tag.get(‘href‘, None)
    print(‘Content:‘, tag.contents[0])
    print(‘Attrs:‘, tag.attrs)

  这个程序的输出如下:

Enter - http://www.dr-chuck.com/page1.html
TAG: <a href="http://www.dr-chuck.com/page2.htm">
Second Page</a>
URL: http://www.dr-chuck.com/page2.htm
Content:
Second Page
Attrs: {‘href‘: ‘http://www.dr-chuck.com/page2.htm‘}

  这个例子只是显示BeautifulSoup分析HTML力量的入门。想要了解更多的信息,请查看www.crummy.com的文档和示例。

时间: 2024-10-10 16:06:31

Python for Infomatics 第12章 网络编程四(译)的相关文章

Python for Infomatics 第12章 网络编程二(译)

注:以下文章原文来自于Dr Charles Severance 的 <Python for Informatics> 12.3 用HTTP协议获取一张图片 在上一节的例子中,我们获取的是一个有换行符的文本文件,并简单的把它显示在屏幕上.同样我们可以用一个小程序通过HTTP协议获取图片.下面这个程序运行时,不是直接在屏幕上显示数据,而是剔除头信息,然后将收到的数据合并保存为一个图片文件.具体代码如下: import socket import time mysock = socket.socke

Python for Infomatics 第12章 网络编程一(译)

注:以下文章原文来自于Dr Charles Severance 的 <Python for Informatics> 本书中的许多例子关注的是从读取文件并查找数据,但在互联网中还有许多不同信息源. 本章我们将伪装成浏览器用超文本传送协议(HTTP)从网站获取网页,通读并分析它. 12.1 超文本传送协议-HTTP 支撑网页运转的网络协议实际非常简单,在Python中内置了套接字(socket)模块,使得使用套接字创建网络连接并获取数据变得非常容易. 套接字最很像文件,可以对它进行读写,但它还提

Python for Infomatics 第12章 网络编程三(译)

注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.5 HTML分析和网页抓取 urllib库一项最常用的功能是抓取网页.就是我们编写一个程序,将自己伪装成网页浏览器,在获取网页之后,再以查找模式检索网页中的数据. 以搜索引擎Google为例,它将查看一个网页的源码,然后抽取其中的链接,再用这些链接获取网页.抽取链接,并一直循环.使用这个技巧,Google几乎爬遍网页上的所有页面. G

Python for Infomatics 第13章 网页服务四(译)

这几天因为其他事务,打断了自己的学习计划,今天继续我的翻译,避免又中途而废. 注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.7 谷歌的 geocoding 网页服务 谷歌公司有一个非常优秀的网页服务叫做geocoding.这个服务允许我们使用他们庞大的地理信息数据库.当我们向geocoding API提交一个"Ann Arbor, MI"的地理位置查找字符串后

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第14章 | 网络编程

Python是个很强大的网络编程工具,原因有二: 1. Python内有很多针对常见网络协议的库 2. Python在处理字节流方面的优势 本章主要内容: 探讨Python标准库中的一些网络模块,探讨SocketServer类,最后是Twisted框架. ------ 相关模块 Socket模块 基本组件,用于两个程序之间的信息通道.套接字包括两个: 服务器套接字和客户端套接字.创建一个服务器套接字后,让它等待连接,这样它就在某个网络地址处监听.客户端套接字负责:简单的连接,完成事务,断开连接.

第13章 网络编程

1 /***************** 2 ***第13章 网络编程 3 *******知识点: 4 **************1.基本概念 5 ******************1.1 网络OSI模型 6 ******************1.2 IP地址 7 ******************1.3 端口地址 8 ******************1.4 通讯协议 9 **************2.Java网络相关类 10 ******************2.1 URLDe

第12章-Swing编程 --- Swing中的特殊容器--JSplitPane

(一)使用JSplitPane JSplitPane用于创建一个分割板,它可以将一个组件(通常是一个容器)分割成两个部分,并提供一个分割条.用户可以拖动该分隔条来调整两个部分的大小.分隔面板的实质是一个特殊容器,该容器只能容纳两个组件,而且分割面板又分为上下分割.左右分割两种情形. 创建分割面板的代码如下: new JSplitPane(方向,左/上组件,右/下组件); JSplitPane分割面板提供了如下几个方法: (1)setDividerLocation(double proportio

第12章-Swing编程 --- 使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条

第12章-Swing编程 --- 使用JProgressBar.ProgressMonitor和BoundedRangeModel创建进度条 (一)创建进度条 使用JProgressBar,可以很方便的创建进度条,其步骤如下: (1)创建一个JProgressBar对象,创建该对象时也可以指定3个参数,用于设置进度条的排列方向(竖直和水平).进度条的最大值和最小值.也可以在创建该对象时不传入任何参数,而是在后面程序中修改这3个属性. 下面代码创建了JProgressBar对象 //创建一条垂直进