如何提取URL的主文本体,丢弃所有无关数据

时间:2015-02-19 03:40:00

标签: python web-scraping beautifulsoup scrapy-spider

    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标记。有人可以提出一些我可以遵循的链接。

2 个答案:

答案 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