查找包含特定字符串的URL

时间:2012-10-30 13:32:13

标签: python regex web-scraping beautifulsoup

我之前没有使用过RegEx,而且每个人似乎都同意这对webscraping和html特别不好,但我不确定如何解决我的小挑战。

我有一个小型的Python刮刀,可以打开24个不同的网页。在每个网页中,都有指向其他网页的链接。我想制作一个简单的解决方案来获取我需要的链接,即使网页有点类似,我想要的链接也不是。

网址之间唯一常见的东西似乎是一个特定的字符串:'uge'或'Uge'(uge意味着丹麦语周 - 而且周数每周都在变化,等等)。它不像网址有一个共同的ID或类似的东西我每次都可以用来定位正确的ID。

我认为可以使用RegEx浏览网页并查找其中包含'uge'或'Uge'的所有网址,然后打开它们。但有没有办法用BS做到这一点?如果我使用RegEx做到这一点,可能的解决方案将如何?

例如,以下是我想在不同网页中抓取的两个网址:

http://www.domstol.dk/KobenhavnsByret/retslister/Pages/Uge45-Tvangsauktioner.aspx

http://www.domstol.dk/esbjerg/retslister/Pages/Straffesageruge32.aspx

3 个答案:

答案 0 :(得分:2)

这应该有用...... RegEx uge\d\d?告诉它找到“uge”后跟一个数字,可能还有另一个数字。

import re
for item in listofurls:
  l = re.findall("uge\d\d?", item, re.IGNORECASE):
  if l:
    print item #just do whatever you want to do when it finds it

答案 1 :(得分:1)

或者只使用简单的for循环:

list_of_urls = ["""LIST GOES HERE"""]
for url in list_of_urls:
    if 'uge' in url.lower():
        # Code to execute

正则表达式看起来像:uge\d\d

答案 2 :(得分:1)

是的,您可以使用BeautifulSoup执行此操作。

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_string)
# To find just 'Uge##' or 'uge##', as specified in the question:
urls = [el["href"] for el in soup.findAll("a", href=re.compile("[Uu]ge\d+"))]
# To find without regard to case at all:
urls = [el["href"] for el in soup.findAll("a", href=re.compile("(?i)uge\d+"))]