0

次のコードを含むページがあります:

<HTML>
<HEAD>
<TITLE>smth</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
</HEAD>
<BODY>
<div id="doc" class="searchN">
<div id="hd" style="border-bottom:0;">
    <a id="logo" class="logoN" href="/" alt="logo" title="open project"></a>

</div> 
    <div id="bd-cross">    
        <ol class="site" start=1>

            <li class="">
                <a href="url/">Smth</a>
                <div class="ref">
                <a href="News_and_Media/">Regional: Europe:</a>
          </div>    
            </li>

            <li class="">
                <a href="url2">Descr3</a> 
                <div class="ref">
                <a href="url3">Descr3</a>   
          </div>    
            </li>
....
</BODY>
</HTML>

<li class="">ページでタグの存在を確認する必要があります。私はPython + RegExpを使用しています:

import re
import urllib2
url = 'url'
#Parse it
MainPage = urllib2.urlopen(url).read()
Li = re.findall("<div id=\"bd-cross\">*<li class=\"\">*</li>", MainPage)
try:
    if Li:
        print "Li tag on " +url+ ": Yes"
    else:
        print "Li tag on " +url+ ": No"
except:
    print "Error"

出力は No ですが、ページにタグが含まれているため、Yes にする必要があります。Li を印刷すると、'[ ]' が出力されます。

4

2 に答える 2

2

BeautifulSoupまたはなどのパッケージを使用する必要がありますlxml.html.soupparser。これにより、作業がはるかに楽になります。後者を使用すると、次のようにやりたいことができます。

>>> import lxml.html.soupparser
>>> MainPage = urllib2.urlopen(url).read()
>>> HtmlDoc = lxml.html.soupparser.fromstring(MainPage)
>>> Elements = HmtlDoc.xpath('//div[@id="bd-cross"]//li[@class=""]')
>>> if len(Elements) > 0:
>>>     print 'Yes'
>>> else:
>>>     print 'No'
于 2013-02-07T09:07:35.363 に答える
1

BeautifulSoup のような HTML パーサーを使用したくない仮定し、抜粋にない HTML のどこかに "bd-cross" div タグがあると仮定すると、正規表現が new-ライン境界。

実際、正規表現に文字が欠けている.ため、正規表現テスターを使用して、正規表現が想定どおりに機能することを確認することをお勧めします

これを修正するflags=re.DOTALLには、関数の最後にre.findall別の引数として追加します。

ドキュメントを見る

「。」を作ります 特殊文字は、改行を含むすべての文字に一致します。このフラグなしでは、'.' 改行以外のすべてに一致します。

于 2013-02-07T09:10:30.543 に答える