# HTTP-解析 HTML 和 XHTML

> 原文： [https://pythonspot.com/http-parse-html-and-xhtml](https://pythonspot.com/http-parse-html-and-xhtml)

在本文中，您将学习如何解析网站的 HTML（超文本标记语言）。 有几个 Python 库可以实现这一目标。 我们将演示一些流行的例子。

## Beautiful Soup-用于解析 HTML 和 XML 的 python 包

该库非常流行，甚至可以处理格式错误的标记。 要获取单个 div 的内容，可以使用以下代码：

```py
from BeautifulSoup import BeautifulSoup
import urllib2

# get the contents
response = urllib2.urlopen('https://en.wikipedia.org/wiki/Python_(programming_language)')
html = response.read()

parsed_html = BeautifulSoup(html)
print parsed_html.body.find('div', attrs={'class':'toc'})

```

这将输出 Wikipedia 文章中称为“ toc”（目录）的 div 中的 HTML 代码。 如果只希望使用原始文本，请使用：

```py
print parsed_html.body.find('div', attrs={'class':'toc'}).text

```

如果要获取页面标题，则需要从标题部分获取：

```py
print parsed_html.head.find('title').text

```

要从网站获取所有图像 URL，可以使用以下代码：

```py
from BeautifulSoup import BeautifulSoup
import urllib2

url = 'https://www.arstechnica.com/'
data = urllib2.urlopen(url).read()
soup = BeautifulSoup(data)
links = soup.findAll('img', src=True)

for link in links:
    print(link["src"])

```

要从网页中获取所有 URL，请使用以下命令：

```py
from BeautifulSoup import BeautifulSoup
import urllib2

url = 'https://www.arstechnica.com/'
data = urllib2.urlopen(url).read()
soup = BeautifulSoup(data)
links = soup.findAll('a')

for link in links:
    print(link["href"])

```

## PyQuery-一个类似 Python 的 jquery 库

要从标记中提取数据，我们可以使用 PyQuery。 它可以根据您的需要获取实际的文本内容和 html 内容。 要获取标签，请使用调用 pq（'tag'）。

```py
from pyquery import PyQuery    
import urllib2
response = urllib2.urlopen('https://en.wikipedia.org/wiki/Python_(programming_language)')

html = response.read()
pq = PyQuery(html)
tag = pq('div#toc')

# print the text of the div
print tag.text()

# print the html of the div
print tag.html()

```

要获得标题，只需使用：

```py
tag = pq('title')

```

## HTMLParser-简单的 HTML 和 XHTML 解析器

该库的用法非常不同。 使用此库，您必须将所有逻辑都放在 WebParser 类中。 用法的基本示例如下：

```py
from HTMLParser import HTMLParser
import urllib2

# create parse
class WebParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Tag: " + tag

# get the contents
response = urllib2.urlopen('https://en.wikipedia.org/wiki/Python_(programming_language)')
html = response.read()

# instantiate the parser and fed it some HTML
parser = WebParser()
parser.feed(html)

```