我想使用 Python 创建一个函数来获取网站内容,例如获取网站组织内容。
在代码中,组织是东京大学:
<tr class="odd">
<th>Organization:</th>
<td>University of Tokyo</td>
</tr>
如何在没有任何新安装的情况下直接获取网站内容,例如获取 http://www.ip-adress.com/ip_tracer/157.123.22.11
我想使用 Python 创建一个函数来获取网站内容,例如获取网站组织内容。
在代码中,组织是东京大学:
<tr class="odd">
<th>Organization:</th>
<td>University of Tokyo</td>
</tr>
如何在没有任何新安装的情况下直接获取网站内容,例如获取 http://www.ip-adress.com/ip_tracer/157.123.22.11
我喜欢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
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()
您将获得一个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