0

私はウェブサイトを持っています、例えばhttp://site.com

メインページを取得し、正規表現に一致するリンクのみを抽出したい..*somepage.*

HTML コード内のリンクの形式は次のとおりです。

<a href="http://site.com/my-somepage">url</a> 
<a href="/my-somepage.html">url</a> 
<a href="my-somepage.htm">url</a>

出力形式が必要です:

http://site.com/my-somepage
http://site.com/my-somepage.html
http://site.com/my-somepage.htm

出力 URL には常にドメイン名が含まれている必要があります。

これに対する高速なpythonソリューションは何ですか?

4

3 に答える 3

2

使用できますlxml.html

from lxml import html

url = "http://site.com"
doc = html.parse(url).getroot() # download & parse webpage
doc.make_links_absolute(url)
for element, attribute, link, _ in doc.iterlinks():
    if (attribute == 'href' and element.tag == 'a' and
        'somepage' in link): # or e.g., re.search('somepage', link)
        print(link)

または同じを使用してbeautifulsoup4

import re
try:
    from urllib2 import urlopen
    from urlparse import urljoin
except ImportError: # Python 3
    from urllib.parse import urljoin
    from urllib.request import urlopen

from bs4 import BeautifulSoup, SoupStrainer # pip install beautifulsoup4

url = "http://site.com"
only_links = SoupStrainer('a', href=re.compile('somepage'))
soup = BeautifulSoup(urlopen(url), parse_only=only_links)
urls = [urljoin(url, a['href']) for a in soup(only_links)]
print("\n".join(urls))
于 2013-03-19T07:26:48.760 に答える
1

BeautifulSoupなどの HTML 解析モジュールを使用します。
一部のコード (一部のみ):

from bs4 import BeautifulSoup
import re

html = '''<a href="http://site.com/my-somepage">url</a> 
<a href="/my-somepage.html">url</a> 
<a href="my-somepage.htm">url</a>'''
soup = BeautifulSoup(html)
links = soup.find_all('a',{'href':re.compile('.*somepage.*')})
for link in links:
    print link['href']

出力:

http://site.com/my-somepage
/my-somepage.html
my-somepage.htm

これだけのデータから、必要なフォーマットを取得できるはずです...

于 2013-03-19T07:06:18.483 に答える
1

Scrapyは、やりたいことを行うための最も簡単な方法です。実はリンク抽出機構が内蔵されています。

リンクをクロールするためのスパイダーの作成についてサポートが必要な場合はお知らせください。

以下も参照してください。

于 2013-03-19T07:30:12.350 に答える