0

urllib2.urlopenで取得したページのリンクを探すための基本的なループがありますが、ページの内部リンクのみをたどろうとしています。

以下のループを作成して同じドメインにあるリンクのみを取得する方法はありますか?

for tag in soupan.findAll('a', attrs={'href': re.compile("^http://")}): 
                webpage = urllib2.urlopen(tag['href']).read()
                print 'Deep crawl ----> ' +str(tag['href'])
                try:
                    code-to-look-for-some-data...

                except Exception, e:
                    print e
4

2 に答える 2

2
>>> import urllib
>>> print urllib.splithost.__doc__
splithost('//host[:port]/path') --> 'host[:port]', '/path'.

ホストが同じであるか、ホストが空の場合(相対パス用)、URLは同じホストに属します。

for tag in soupan.findAll('a', attrs={'href': re.compile("^http://")}):

            href = tag['href']
            protocol, url = urllib.splittype(href) # 'http://www.xxx.de/3/4/5' => ('http', '//www.xxx.de/3/4/5')
            host, path =  urllib.splithost(url)    # '//www.xxx.de/3/4/5' => ('www.xxx.de', '/3/4/5')
            if host.lower() != theHostToCrawl and host != '':
                continue

            webpage = urllib2.urlopen(href).read()

            print 'Deep crawl ----> ' +str(tag['href'])
            try:
                code-to-look-for-some-data...

            except:
                import traceback
                traceback.print_exc()

あなたがこれをするので

'href': re.compile("^http://")

相対パスは使用されません。のようなものです

<a href="/folder/file.htm"></a>

たぶん、reをまったく使用しないのですか?

于 2012-05-03T16:27:48.040 に答える
0

クローラーへのアドバイス:mechanizeをBeautifulSoupと組み合わせて使用​​すると、タスクが大幅に簡素化されます。

于 2012-05-04T08:41:35.020 に答える