用Python解析HTML

用Python解析HTML,python,html,Python,Html,我想用Python创建一个函数来获取网站内容, 例如,获取网站组织内容 ,组织是东京大学: <tr class="odd"> <th>Organization:</th> <td>University of Tokyo</td> </tr> 组织: 东京大学 如何直接获取网站内容而无需任何新安装,如get我喜欢,它可以轻松访问HTML字符串中的数据。 实际的复杂性取决于HTML的形成方式。如果HTML使用“id

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

<代码>,组织是东京大学:

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

组织:
东京大学

如何直接获取网站内容而无需任何新安装,如get

我喜欢,它可以轻松访问HTML字符串中的数据。 实际的复杂性取决于HTML的形成方式。如果HTML使用“id”和“class”,这很容易。如果不是,那么您就依赖于更静态的东西,比如“获取第一个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
我喜欢,它使访问HTML字符串中的数据变得容易。 实际的复杂性取决于HTML的形成方式。如果HTML使用“id”和“class”,这很容易。如果不是,那么您就依赖于更静态的东西,比如“获取第一个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
使用:

使用:


您将使用
urlib2.urlopen
获得
403访问禁止错误
,因为此网站正在通过检查是否被认可的用户代理访问来过滤访问。下面是全部内容:

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

您将使用
urlib2.urlopen
获得
403访问禁止错误
,因为此网站正在通过检查是否被认可的用户代理访问来过滤访问。下面是全部内容:

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


@jesseslu你需要下载这个文件吗?或者只解析和访问它?好吧,你需要得到html文件:)我想你会有一个问题,打开这个webiste的建议,其他人。添加了执行此操作的答案…@jesseslu您需要下载该文件吗?或者只解析和访问它?好吧,你需要得到html文件:)我想你会有一个问题,打开这个webiste的建议,其他人。添加了一个解决方法…如何在没有任何新安装的情况下直接获取网站内容,如如何阅读内容,请参见我的编辑。不要使用
urllib2
!改为使用
请求
。@egasimus请求很好,但它不是Python标准库的一部分。如果没有任何新的安装(如get-See my edit)来阅读内容,我如何直接获取网站内容。不要使用
urllib2
!改为使用
请求
。@egasimus requests很好,但它不是Python标准库的一部分。如果没有像get这样的新安装,我如何直接获取网站内容,它将import lxml.html显示为lh ImportError:没有名为lxml.html的模块?lxml.html代表什么?谢谢,安装lxml后,它仍然有错误回溯(最近一次调用):文件“ext.py”,第2行,在?导入lxml.html作为lh文件“/usr/lib64/python2.4/site packages/lxml/html/_init__.py”,第42行,在?从lxml import-etree-importorror:/usr/lib64/python2.4/site-packages/lxml/etree.so:未定义的符号:xmlMemDisplayLastyes,我使用的是Python 2.4.3。使用centos 5.5是的,我使用的是Python 2.4.3。当我运行centos 5.5hi时,它将import lxml.html显示为lh ImportError:没有名为lxml.html的模块?lxml.html代表什么?谢谢,安装lxml后,它仍然有错误回溯(最近一次调用):文件“ext.py”,第2行,在?导入lxml.html作为lh文件“/usr/lib64/python2.4/site packages/lxml/html/_init__.py”,第42行,在?从lxml import-etree-importorror:/usr/lib64/python2.4/site-packages/lxml/etree.so:未定义的符号:xmlMemDisplayLastyes,我使用的是Python 2.4.3。使用centos 5.5是的,我使用的是Python 2.4.3。使用centos 5.5