0

私はこれまで RegEx を使用したことがなく、特に Web スクレイピングや html には良くないことに誰もが同意しているようですが、それなしで私の小さな課題を解決する方法がよくわかりません。

24 の異なる Web ページを開く小さな Python スクレーパーがあります。各 Web ページには、他の Web ページへのリンクがあります。必要なリンクを取得する簡単なソリューションを作成したいのですが、ウェブページは多少似ていますが、必要なリンクはそうではありません。

URL 間の唯一の共通点は、特定の文字列のようです: 'uge' または 'Uge' (uge はデンマーク語で週を意味し、週番号は毎週変わります)。URL に共通の ID があるか、毎回正しい ID をターゲットにするために使用できるようなものではありません。

RegExを使用してWebページを調べ、「uge」または「uge」を含むすべてのURLを見つけて開くことができると思います。しかし、BSを使用してそれを行う方法はありますか?そして、RegExを使用してそれを行うと、可能な解決策はどのようになりますか?

たとえば、異なる Web ページで取得したい 2 つの 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 に答える