0

一部の HTML を大きな txt ファイル (最大 5 万行) にスクレイピングして、特定の URL のセットを抽出したいと考えています。私が求めている URL は、次の 2 つのパターンのいずれかです。

初め

<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>

2番

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

必要なテキストはhttps://www.site.com/joesmith. 初めて lxml を使用していますが、これをまとめるのに苦労しています。

これが私のコードです

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

このコードを findall と findtext の両方で試してみましたが、どちらの方法でも結果は同じで、"AttributeError: 'str' object has no attribute 'findall'"です。「result」が の文字列であることを確認しましたtype()

URL を抽出するための正しい道を進んでいますか? この属性エラーにどのように対処すればよいですか?

4

1 に答える 1

2

HTML ベースのツリーが XPath をサポートしているかどうかはわかりません (サポートしていると思われます)。その場合、あなたは単に行うことができます

urls = tree.xpath('//div[@class="pics"]/a/@href') + 
       tree.xpath('//div[@class="name"]/a/@href')
于 2012-11-11T04:19:31.713 に答える