从html页面提取Url美丽的Soup / Python

时间:2013-09-08 12:15:42

标签: python web-scraping beautifulsoup

我正在尝试根据我传递的参数获取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 /............./

之后字符串的位置

因为我在正则表达式上很差,所以有点复杂

1 个答案:

答案 0 :(得分:0)

你确实必须将它与正则表达式匹配。

如果您的命令行参数的格式为south-carolina 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()匹配文字包含就足够了。