0

我正在尝试根据我通过的参数获取 href ..例如 test.py arg1 arg2 ...其中 arg1 是学校名称,例如“南卡罗来纳州”,因此它必须根据在争论。这是我使用 urlopen 和 BeautifulSoup 保存的美化源代码中的一个小片段。

<a data-ylk="lt:s;sec:mod-sch;slk:game;itc:0;ltxt:;tar:sports.yahoo.com;" 
  href="/ncaaf/south-carolina-gamecocks-georgia-bulldogs-201309070068/">
<span class="away "> 30 </span>
 -
<span class="home winner"> 41 </span> </a>

现在 arg1 应该与提供的 href 匹配,以便我可以检索分数..我使用

bs.find('a', href="/ncaaf/south-carolina-gamecocks-georgia-bulldogs-201309070068/")

但是,如果我必须将我的论点(例如南卡罗来纳州)与 href 匹配,该怎么办?我该如何匹配呢?像href="/ncaaf/south-carolina-*这样我可以通过匹配argument1(我将用连字符替换)来获取整个href,如果我给出“gerorgia”,是否可以通过匹配参数来检索href,而不管字符串的位置如何在/ncaaf/......之后

由于我的正则表达式很差,所以有点复杂

4

1 回答 1

0

您确实必须将其与正则表达式匹配。

如果您的命令行参数的格式south-carolina为 in sys.argv[1],请使用:

 import re

 school_name = sys.argv[1]
 url_pattern = re.compile(r'/ncaaf/{}-'.format(re.escape(school_name)))

 matching_links = soup.find_all('a', href=url_pattern)

re.escape()确保输入中任何可以被解释为正则表达式元字符的字符都被正确转义。

因为south-carolina那会导致/ncaaf/south-carolina-匹配任何包含文字文本的模式/ncaaf/south-carolina-;您实际上不需要包含任何通配符,因为包含re.search()匹配文本就足够了。

于 2013-09-08T13:20:40.120 回答