-2

私はこのコードを試しました:

import urllib
from bs4 import BeautifulSoup
url = 'http://www.freesoft4down.com/Windows/System-Utilities/Clipboard-Tools/Page-1-0-0-0-0.html'
pageurl = urllib.urlopen(url)
soup = BeautifulSoup(pageurl)
print soup.find('ul',{'class':'div_pages'})

タグ内のリンクを読みたいので、タグ内の次のリンクを開くことができます。各カテゴリに複数のページがあるためです。

4

2 に答える 2

2

まず、次のページの URL を取得する必要があります。次に、urllib2 を使用して次のページを開くことができます。

URL に明確なパターンが存在する場合は、URL を取得するために手動で作成できます。

または、nextタグを読み取ってコンテンツを読み取ることができます。

# the advantage of using `Next` is it is web text based which is more reliable. 
import urllib
from bs4 import BeautifulSoup
import re
url = 'http://www.freesoft4down.com/Windows/System-Utilities/Clipboard-Tools/Page-1-0-0-0-0.html'
pageurl = urllib.urlopen(url)
soup = BeautifulSoup(pageurl)
print soup.find('ul',{'class':'div_pages'}).find(text=re.compile("Next")).find_parent('a')['href']

出力は次のようになります。

http://www.freesoft4down.com/Windows/System-Utilities/Clipboard-Tools/Page-2-0-0-0-0.html

これで、次のページへのリンクができました。次のページ、次のページを取得したい場合は、このプロセスを繰り返すだけです。

これがあなたの質問に答えているかどうか教えてください。

于 2013-11-12T22:50:39.197 に答える
1

B.Mr.W.の回答を取得し、次のページを1つずつ取得するように改善します:

import re
import urllib
from bs4 import BeautifulSoup


def get_next_page(url):
    pageurl = urllib.urlopen(url)
    soup = BeautifulSoup(pageurl)
    next_text = soup.find('ul', {'class': 'div_pages'}).find(text=re.compile("Next"))
    if next_text:
        return next_text.find_parent('a')['href']
    return None

next_url = 'http://www.freesoft4down.com/Windows/System-Utilities/Clipboard-Tools/Page-1-0-0-0-0.html'
while next_url:
    print 'Retrieving URL {}'.format(next_url)
    next_url = get_next_page(next_url)

おそらくコードを変更して、実際にページで何か役に立つことをしたいと思うでしょう。

たとえば、urllib.urlopen呼び出しをwhileループ内に配置して、ページのコンテンツに直接アクセスできるようにすることができます。(また、ページを 2 回取得するのを防ぐために、URL をget_next_page関数に送信するのではなく、ページのコンテンツなどを送信します。)

于 2013-11-13T08:20:33.587 に答える