2012-11-11 3 views
0

일부 HTML을 큰 txt 파일 (~ 50k 줄)로 긁어 특정 URL 집합을 추출하려고합니다. 난 후 URL은 두 가지 패턴 중 하나에 : 두 번째 lxml로 URL 추출

<div class="pic"> 
    <a href="https://www.site.com/joesmith"><img alt="Joe Smith" class="person_image" src="https://s3.amazonaws.com/photos.site.com/medium_jpg?12345678"></a> 
</div> 

<div class="name"> 
    <a href="https://www.site.com/joesmith">Joe Smith</a> 
</div> 

내가 https://www.site.com/joesmith입니다 필요 텍스트

첫째. 나는 처음으로 lxml로 작업하고 있는데,이 문제를 해결하는 데 어려움을 겪고있다.

는 여기에 내가 findall은과에는 FindText 모두이 코드를 시도했습니다

from lxml import etree 
from io import StringIO 

def read(filename): 
    file = open(filename, 'r') 
    text = file.read() 
    file.close() 
    out = unicode(text, errors='ignore') 
    return out 

def parse(filename): 
    data = read(filename) 
    parser = etree.HTMLParser() 
    tree = etree.parse(StringIO(data), parser) 
    result = etree.tostring(tree.getroot(), pretty_print=True, method='HTML') 
    urls = result.findall('<div class="name">') 
    return urls 

내 코드, 그리고 어느 쪽이든 결과는 동일 이다 "AttributeError : 'STR'객체 'findall은'을 어떤 속성이 없습니다". 나는 '결과'가 type() 인 문자열임을 확인했습니다.

URL을 추출하기 위해 올바른 경로로 가고 있습니까? 이 속성 오류를 어떻게 해결해야합니까?

답변

2

HTML 기반 트리가 XPath를 지원하는지 잘 모르겠습니다. 이 경우에 당신은 간단히 할 수 있습니다

urls = tree.xpath('//div[@class="pics"]/a/@href') + 
     tree.xpath('//div[@class="name"]/a/@href') 
+0

이것은 위대하다, 나는 xpath에 대해서도 몰랐다. 감사! – Lenwood