0

我以前没有使用过 RegEx,每个人似乎都同意它对网页抓取和 html 尤其不利,但我不确定如何解决我的小挑战。

我有一个小的 Python 爬虫,可以打开 24 个不同的网页。在每个网页中,都有指向其他网页的链接。我想制作一个简单的解决方案来获取我需要的链接,即使网页有些相似,但我想要的链接却不是。

url 之间唯一的共同点似乎是一个特定的字符串:'uge' 或 'Uge'(uge 在丹麦语中表示周 - 周数每周都在变化,呵呵)。这不像 url 有一个共同的 ID 或类似的东西,我每次都可以用来定位正确的。

我认为可以使用 RegEx 浏览网页并找到所有包含“uge”或“Uge”的网址,然后打开它们。但是有没有办法使用 BS 来做到这一点?如果我使用 RegEx 来做,可能的解决方案会是什么样子?

例如,这是我想在不同网页中抓取的两个 url:

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

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

4

3 回答 3

2

这应该可以工作...... RegExuge\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
于 2012-10-30T13:47:07.793 回答
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

于 2012-10-30T13:36:11.687 回答
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+"))]
于 2012-10-30T14:37:14.267 回答