我正在學習構建網絡抓取工具,並且正在努力從網站獲取所有網址。我一直在玩,沒有像以前一樣的代碼,但我已經能夠獲得所有的鏈接,但我的問題是遞歸,我需要一遍又一遍地做同樣的事情,但是我認爲我的問題是遞歸它所做的對我寫的代碼來說是正確的。我的代碼是波紋管使用python從網站獲取所有網址
#!/usr/bin/python
import urllib2
import urlparse
from BeautifulSoup import BeautifulSoup
def getAllUrl(url):
page = urllib2.urlopen(url).read()
urlList = []
try:
soup = BeautifulSoup(page)
soup.prettify()
for anchor in soup.findAll('a', href=True):
if not 'http://' in anchor['href']:
if urlparse.urljoin('http://bobthemac.com', anchor['href']) not in urlList:
urlList.append(urlparse.urljoin('http://bobthemac.com', anchor['href']))
else:
if anchor['href'] not in urlList:
urlList.append(anchor['href'])
length = len(urlList)
for url in urlList:
getAllUrl(url)
return urlList
except urllib2.HTTPError, e:
print e
if __name__ == "__main__":
urls = getAllUrl('http://bobthemac.com')
for x in urls:
print x
我試圖做到的,是讓所有的網址,與目前的設置程序中的站點運行,直到它運行的內存中的所有我想要的是得到一個網址現場。有沒有人有任何想法如何做到這一點,認爲我有正確的想法只需要一些小的代碼更改。
編輯
對於那些你有什麼intrested波紋管是我的工作代碼,得到了現場所有的人的URS可能會發現它很有用。這不是最好的代碼,需要一些工作,但有一些工作可能會很好。
#!/usr/bin/python
import urllib2
import urlparse
from BeautifulSoup import BeautifulSoup
def getAllUrl(url):
urlList = []
try:
page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)
soup.prettify()
for anchor in soup.findAll('a', href=True):
if not 'http://' in anchor['href']:
if urlparse.urljoin('http://bobthemac.com', anchor['href']) not in urlList:
urlList.append(urlparse.urljoin('http://bobthemac.com', anchor['href']))
else:
if anchor['href'] not in urlList:
urlList.append(anchor['href'])
return urlList
except urllib2.HTTPError, e:
urlList.append(e)
if __name__ == "__main__":
urls = getAllUrl('http://bobthemac.com')
fullList = []
for x in urls:
listUrls = list
listUrls = getAllUrl(x)
try:
for i in listUrls:
if not i in fullList:
fullList.append(i)
except TypeError, e:
print 'Woops wrong content passed'
for i in fullList:
print i
看起來你的函數不返回任何東西。 –
是的,這是一個正在進行的工作,'print urlList'是返回的地方,我只是想玩它。編輯以顯示返回時的情況。 – bobthemac
當人們無理由地給出負面標記時,恨它 – bobthemac