0

我想使用 Python 创建一个函数来获取网站内容,例如获取网站组织内容。

在代码中,组织是东京大学:

<tr class="odd">
  <th>Organization:</th>
  <td>University of Tokyo</td>
</tr>

如何在没有任何新安装的情况下直接获取网站内容,例如获取 http://www.ip-adress.com/ip_tracer/157.123.22.11

4

3 回答 3

3

我喜欢BeautifulSoup,它可以很容易地访问 HTML 字符串中的数据。实际的复杂性取决于 HTML 的形成方式。如果 HTML 使用 'id's 和 'class'es,这很容易。如果不是,您将依赖于更静态的东西,例如“获取第一个 div,第二个列表项,...”,如果 HTML 的内容发生很大变化,这很糟糕。

要下载 HTML,我引用 BeautifulSoup 文档中的示例:

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://www.icc-ccs.org/prc/piracyreport.php")
soup = BeautifulSoup(page)
for incident in soup('td', width="90%"):
    where, linebreak, what = incident.contents[:3]
    print where.strip()
    print what.strip()
    print
于 2012-10-11T06:48:26.560 回答
2

使用BeautifulSoup

import bs4

html = """<tr class="odd">
  <th>Organization:</th>
  <td>University of Tokyo</td>
</tr>
"""
soup = bs4.BeautifulSoup(html)
univ = soup.tr.td.getText()
assert univ == u"University of Tokyo"

编辑:

如果您需要先阅读 HTML,请使用urllib2

import urllib2

html = urllib2.urlopen("http://example.com/").read()
于 2012-10-11T06:50:18.817 回答
0

您将获得一个403 Access Forbidden error使用urllib2.urlopen ,因为该网站通过检查它是否被认可的用户代理访问来过滤访问。所以这是完整的事情:

import urllib2
import lxml.html as lh

req = urllib2.Request("http://www.ip-adress.com/ip_tracer/157.123.22.11", headers={'User-Agent' : "Magic Browser"})
html = urllib2.urlopen(req).read()
doc=lh.fromstring(html)
print ''.join(doc.xpath('.//*[@class="odd"]')[-1].text_content().split())
>>> 
Organization:ZenithDataSystems
于 2012-10-11T07:19:35.887 回答