0

これは私のhtmlコードの一部です:

<link rel ="stylesheet" type="text/css" href="catalog/view/theme/default/stylesheet/stylesheet.css" />
<link id='all-css-0' href='http://1' type='text/css' media='all' rel='stylesheet'  />
<link rel='stylesheet'  id='all-css-1' href =   'http://2' type='text/css' media='all' />

スタイルシートのすべての href を見つける必要があります。

のような正規表現を使用しようとしました

 <link\s+rel\s*=\s*["']stylesheet["']\s*href\s*=\s*["'](.*?)["'][^>]*?>

完全なコードは

body = '''<link rel ="stylesheet" type="text/css" href="catalog/view/theme/default/stylesheet/stylesheet.css" />
<link id='all-css-0' href='http://1' type='text/css' media='all' rel='stylesheet'  />
<link rel='stylesheet'  id='all-css-1' href =   'http://2' type='text/css' media='all' />''''

real_viraz = '''<link\s+rel\s*=\s*["']stylesheet["']\s*href\s*=\s*["'](.*?)["'][^>]*?>'''
r = re.findall(real_viraz, body, re.I|re.DOTALL)
print r

しかし、問題はrel='stylesheet'href=''が で任意の順序で<link ...>ある可能性があり、それらの間のほとんどすべてである可能性があることです。

正しい正規表現を見つけるのを手伝ってください。ありがとう。

4

3 に答える 3

3

どういうわけか、あなたの名前は電源自動化ツールSikuliのように見えます:)

Python で HTML/XML ベースのテキストを解析しようとしている場合。BeautifulSoup (DOCUMENT)は、それを支援する非常に強力なライブラリです。それ以外の場合は、実際に車輪の再発明を行っていることになります ( Randy Sargentの興味深い話)。

from bs4 import BeautifulSoup4
# in case you need to get the page first. 
#import urllib2
#url = "http://selenium-python.readthedocs.org/en/latest/"
#text = urllib2.urlopen("url").read()
text = """<link rel ="stylesheet" type="text/css" href="catalog/view/theme/default/stylesheet/stylesheet.css" /><link id='all-css-0' href='http://1' type='text/css' media='all' rel='stylesheet'  /><link rel='stylesheet'  id='all-css-1' href =   'http://2' type='text/css' media='all' />"""
soup = BeautifulSoup(text)
links = soup.find_all("link", {"rel":"stylesheet"})
for link in links:
    try:
        print link['href']
    except:
        pass

出力は次のとおりです。

catalog/view/theme/default/stylesheet/stylesheet.css
http://1
http://2

Beautifulsoup をよく学べば、HTML や XML で何かを解析する準備が 100% 整います。(将来、 SeleniumScrapyをツールボックスに入れたいと思うかもしれません。)

于 2013-10-27T16:07:58.170 に答える
1

簡単な答え: (X)HTML の解析に正規表現を使用しないでください。(X)HTML パーサーを使用してください。

Python では、これはlxml. lxml の HTML パーサーを使用して HTML を解析し、XPath クエリを使用してすべての要素を取得し、それらの属性linkを収集できます。href

from lxml import etree

parser = etree.HTMLParser()

doc = etree.parse(open('sample.html'), parser)
links = doc.xpath("//head/link[@rel='stylesheet']")
hrefs = [l.attrib['href'] for l in links]

print hrefs

出力:

['catalog/view/theme/default/stylesheet/stylesheet.css', 'http://1', 'http://2']
于 2013-10-27T16:08:14.953 に答える