我一直在使用beautifulsoup
在python中使用webcrawler并遇到了几个问题:
我不知道如何处理像404s,503s或其他类似的错误:目前,webcrawler只是打破程序执行
我不知道如何搜索页面中的特定字符串,例如我是否希望它打印出包含字符串“Python”的页面
如果有人对如何完成其中任何一项有任何意见,或者可能能够推动我朝着正确的方向前进,我们将不胜感激。
目前我的代码是这样的:
import urllib.request, time, unicodedata
from bs4 import BeautifulSoup
num = 0
def index():
index = open('index.html', 'w')
for x in range(len(titles)-1):
index.write("<a href="+'"'+tocrawl[x]+'"'+" "+"target=" "blank"" >"+titles[x+1]+"</a></br>\n")
index.close()
return 'Index Created'
def crawl(args):
page = urllib.request.urlopen(args).read()
soup = BeautifulSoup(page)
soup.prettify().encode('UTF-8')
titles.append(str(soup.title.string.encode('utf-8'),encoding='utf-8'))
for anchor in soup.findAll('a', href=True):
if str(anchor['href']).startswith(https) or str(anchor['href']).startswith(http):
if anchor['href'] not in tocrawl:
if anchor['href'].endswith(searchfor):
print(anchor['href'])
if not anchor['href'].endswith('.png') and not anchor['href'].endswith('.jpg'):
tocrawl.append(anchor['href'])
tocrawl, titles, descriptions, scripts, results = [], [], [], [], []
https = 'https://'
http = 'http://'
next = 3
crawl('http://google.com/')
while 1:
crawl(tocrawl[num])
num = num + 1
if num==next:
index()
next = next + 3
我正在使用Python 3.2,以防它重要
答案 0 :(得分:1)
处理错误代码:
当您尝试打开URL并遇到错误时,您将获得一个HTTPError,其中包含HTTP状态代码和原因(例如某些字符串)。如果要忽略错误,可以将函数包装在try / except
块中并忽略错误:
try:
page = urllib.request.urlopen(args).read()
# ...
except urllib.error.HTTPError as e:
# we don't care about no stinking errors
# ... but if we did, e.code would have the http status code...
# ... and e.reason would have an explanation of the error (hopefully)
pass
在页面中搜索字符串:
美丽的汤非常强大;其find
方法(及其find_all
方法)支持关键字参数text
,该参数使用正则表达式查找页面中的文本。在您的情况下,由于您只需要确保文本存在,您可以通过find
方法确保返回结果。
if soup.find(text=re.compile('my search string')):
# do something
有关text
参数can be found in the documentation的详细信息。