import urllib
from bs4 import BeautifulSoup
import urlparse
import mechanize
url = "http://www.wholefoodsmarket.com/forums"
br = mechanize.Browser()
urls = [url]
visited = [url]
while len(urls)>0:
try:
br.open(urls[0])
urls.pop(0)
for link in br.links():
newurl = urlparse.urljoin(link.base_url,link.url)
b1 = urlparse.urlparse(newurl).hostname
b2 = urlparse.urlparse(newurl).path
newurl = "http://"+b1+b2
if newurl not in visited and urlparse.urlparse(url).hostname in newurl:
urls.append(newurl)
visited.append(newurl)
ur = urllib.urlopen(newurl)
soup = BeautifulSoup(ur.read())
html = soup.find_all()
print html
f = open('content.txt', 'a')
f.write(newurl)
f.write("\n")
print >>f.write(soup.title.string)
f.write("\n")
f.write(soup.head)
f.write("\n")
f.write(soup.body)
print >>f, "Next Link\n"
f.close()
except:
print "error"
urls.pop(0)
我试图以递归方式抓取高达1 GB的html页面数据,然后提取相关的文本数据,即丢弃所有代码,html标记。有人可以提出一些我可以遵循的链接。
答案 0 :(得分:0)
您可以尝试使用get_text
method。
相关代码段:
soup = BeautifulSoup(html_doc)
print(soup.get_text())
希望它让你开始朝着正确的方向前进
答案 1 :(得分:0)
如果您不限于BeautifulSoup,我建议您探索xpath功能。
作为从页面获取所有文本的示例,您需要一个像这样简单的表达式:
//*/text()
所有链接的文字都是:
//a/text()
类似的表达式可用于提取您需要的所有信息。 有关XPath的更多信息:https://stackoverflow.com/tags/xpath/info
如果您在从头开始构建爬虫时遇到问题,请考虑使用已经实现的爬虫(如Scrapy)