无法只获得1次链接

时间:2015-09-29 13:34:11

标签: python html regex beautifulsoup html-parsing

我在HTML中的锚标记内有3个唯一的链接。所有链接出现2次。我想要做的是使用python正则表达式匹配只获取3个链接但不能这样做而且那就是它。

这是我的HTML:

<html>
    <body>
        <ul class="asidemenu_h1">
            <li class="top">
            <h3>Mobiles</h3>
            </li>
            <li>
                <a href="http://www.mega.pk/mobiles-apple/" title="Apple Mobiles Price">Apple</a>
            </li>
            <li>
                <a href="http://www.mega.pk/mobiles-asus/" title="Asus Mobiles Price">Asus</a>
            </li>
            <li>
                <a href="http://www.mega.pk/mobiles-black_berry/" title="Black Berry Mobiles Price">Black Berry</a>
            </li>
        </ul>

        <ul class="start2" id="start2ul63" style="visibility: hidden; opacity: 0;">
            <li>
            <h3>Mobiles</h3>
                <ul class="start3 bolder-star">
                    <li>
                        <a href="http://www.mega.pk/mobiles-apple/">Apple</a>
                    </li>
                    <li>
                        <a href="http://www.mega.pk/mobiles-asus/">Asus</a>
                    </li>
                    <li>
                        <a href="http://www.mega.pk/mobiles-black_berry/">Black Berry</a>
                    </li>
                </ul>
            </li>
        </ul>
    </body>
</html>

这是我的方法(1)使用for循环与正则表达式匹配:

for link in soup.find_all("a", href=re.compile(r'(http:\/\/www\.mega\.pk\/mobiles-[A-z]+\/)(?=.*\1)', re.DOTALL)):
    link.get('href')

这根本不会返回任何内容。

这是我的方法(2)使用for循环与正则表达式匹配:

for link in soup.find_all("a", href=re.compile(r'(http:\/\/www\.mega\.pk\/mobiles-\w+\/)(?!.*\1)', re.UNICODE | re.DOTALL)):
    link.get('href')

这也会返回重复的链接。

1 个答案:

答案 0 :(得分:1)

获取mobileshref soup.select("ul.asidemenu_h1 a[href*=mobiles]") 的所有链接CSS selector

ul

请注意,我限制它搜索具有asidemenu_h1类的*=内的链接 - 仅此一项就可以帮助您避免重复。 href这里的意思是“包含”。

如果您坚持使用正则表达式来检查menu = soup.find("ul", class_="asidemenu_h1") links = menu.find_all("a", href=re.compile(r"mega\.pk\/mobiles-[a-zA-Z0-9_-]+\/$")) for link in links: print(link.get_text()) 值:

group amount field