0

Python と Beautiful Soup を使用して、シビック コモンズ - ソーシャル メディアリンクから利用可能なソフトウェアの URL を取得しています。すべてのソーシャル メディア ソフトウェアのリンクが必要です (20 ページにまたがっています)。最初のページに記載されているソフトウェアの URL を取得できます。

以下は、これらの値を取得するために作成した Python コードです。

from bs4 import BeautifulSoup
import re
import urllib2

base_url = "http://civiccommons.org"
url = "http://civiccommons.org/software-functions/social-media"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

list_of_links = [] 
for link_tag in soup.findAll('a', href=re.compile('^/apps/.*')):
   string_temp_link = base_url+link_tag.get('href')
   list_of_links.append(string_temp_link)

list_of_links = list(set(list_of_links))  

for link_item in list_of_links:
   print link_item

print ("\n")

#Newly added code to get all Next Page links from a url    
next_page_links = [] 
for link_tag in soup.findAll('a', href=re.compile('^/.*page=')):
   string_temp_link = base_url+link_tag.get('href')
   next_page_links.append(string_temp_link)
for next_page in next_page_links:
   print next_page

/apps/ 正規表現を使用して、ソフトウェアのリストを取得しました。

しかし、次のページをクロールするためのより良いアプローチがあるかどうか知りたかった. 正規表現 "*page=" を使用して、次のページのリンクと一致させることができます。しかし、これはページのリストを繰り返します。

どうすればこれをより良い方法で行うことができますか?

4

1 に答える 1

2

ページを見ると、5つのページがあり、最後は「...?page = 4」なので、最初のページがあり、次にpage=1からpage=4...であることがわかります。

<li class="pager-last last">
<a href="/software-licenses/gpl?page=4" title="Go to last page">last »</a>
</li>

したがって、クラスごと(またはタイトルごと)にそれを取得してから、hrefを解析できます...

from urlparse import urlparse, parse_qs
for pageno in xrange(1, int(parse_qs(urlparse(url).query)['page'][0]) + 1):
    pass # do something useful here like building a url string with pageno
于 2012-07-22T19:54:31.527 に答える