2014-10-06 53 views
0
信息

目前我有以下代码:使用lxml或???从中提取网页

# Import der Pythonmodule 
import urllib 
import lxml 
import mechanize 
import sys 

# Verbindung zum URL aufbauen 
try: 
    URL = urllib.urlopen("http://...") 

except: 
    print "Verbindung zum URL fehlgeschlagen" 
    sys.exit(0) 

# Quellcode des URL lesen 
URL_quellcode = URL.readlines() 

# Verbindung zum URL beenden 
URL.close() 

到目前为止好,我可以打开和读取URL的来源。现在我想查看各种可能性来提取一些东西。

可能性1: < P类= “作者名”>有些名称</P>
可能性2: 相对= “作者”>有些名称</A>

我想提取作者姓名。我的逻辑如下:

检查“author-name”的所有类 - 如果发现给我标签内的文本。如果没有找到检查“rel =”author“ - 如果发现给我的标签内的文本。如果不打印”没有找到作者“

我该怎么做呢?我可以使用正则表达式,lxml,或任何。什么是最优雅的方式

回答

3

使用BeautifulSoup

from bs4 import BeautifulSoup 

document_a = """ 
<html> 
    <body> 
     <p class="author-name">Some Name</p> 
    </body> 
</html> 
""" 

document_b = """ 
<html> 
    <body> 
     <p rel="author-name">Some Name</p> 
    </body> 
</html> 
""" 
def get_author(document): 
    soup = BeautifulSoup(document_a) 
    p = soup.find(class_="author-name") 
    if not p: 
     p = soup.find(rel="author-name") 
     if not p: 
      return "No Author Found" 
    return p.text 

print "author in first document:", get_author(document_a) 
print "author in second document:", get_author(document_b) 

结果:?!

author in first document: Some Name 
author in second document: Some Name 
+0

真棒,就像一个魅力我开始与BS现在,真的很有趣不管怎么说,我是想知道这将如何工作无线th未知数量的URL。我将从.txt文件加载它们,因此我不能像document_a .b .c等那样做。基本上,输出将是URL,Authorname作为一个列表的打印操作。 – eLudium 2014-10-06 15:10:22

+0

在这种情况下,你需要做一些类似'print [url,get_author(get_document(url))for my_file]'。您必须编写一个'get_document'函数来从给定的url中检索HTML数据。 – Kevin 2014-10-06 15:30:48