私は数日前に厄介なHTMLクラスのすべてのインスタンスを探し出す必要があり、すぐに次のものをまとめました-それはスクレーパーとクローラーの両方であり、それは小さいです。
import sys
import urllib.parse as uparse
import httplib2
from bs4 import BeautifulSoup
http = httplib2.Http()
hit_urls = set()
def crawl(url, check, do, depth=1):
global hit_urls
if url in hit_urls:
#print("**Skipping %s" % url)
return
#print("Crawling %s" % url, file=sys.stderr)
hit_urls.add(url)
_, response = http.request(url)
soup = BeautifulSoup(response)
resp = do(url, soup)
if depth > 0:
for link in soup.find_all('a'):
if link.has_key('href'):
rel_url = link['href']
if(check(rel_url)):
crawl(uparse.urljoin(url,rel_url), check, do, depth-1)
return resp
def isLocal(url):
if not url.startswith('/'):
return False
if url.startswith('/goToUrl'): # 3rd party redirect page
return False
return True
def findBadClass(url, soup):
for t in soup.find_all(True,{'class': 'badClass'}):
print(url+":"+str(t))
if __name__ == '__main__':
crawl('http://example.com', isLocal, findBadClass)