所以我有一个网络爬虫,它打印出所有来自给定站点的链接,而不重复相同的链接。我的代码(带有已导入但尚未使用的库)如下所示:
import urllib
import re
import mechanize
from bs4 import BeautifulSoup
import urlparse
import cookielib
from urlparse import urlsplit
from publicsuffix import PublicSuffixList
url = "http://www.zahnarztpraxis-uwe-krause.de"
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.set_handle_equiv(False)
br.set_handle_redirect(True)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
page = br.open(url, timeout=5)
htmlcontent = page.read()
soup = BeautifulSoup(htmlcontent)
newurlArray = []
for link in br.links(text_regex=re.compile('^((?!IMG).)*$')):
newurl = urlparse.urljoin(link.base_url, link.url)
if newurl not in newurlArray:
newurlArray.append(newurl)
print newurl
结果是这样的:
^{pr2}$现在我的问题是如何告诉我的程序,它只打印出包含单词kontakt
的链接。在
我应该使用正则表达式还是其他什么?在
我从来没有这样做过,所以我不知道用什么来获得唯一的结果:
http://www.zahnarztpraxis-uwe-krause.de/pages/kontakt.html
有什么建议吗?在
是的,这就像在上面使用regex或普通的旧Python字符串
find()
一样简单链接.url. (编辑:您也可以像shshank那样使用'kontakt' in link.url
)显然这两种方法(string
find()
方法或in
运算符)都可以匹配字符串中的任何位置,这有点草率。 你想在这里做的只是在url尾部进行匹配。 您可以使用find()
在link.url.split('/')[-1]
上检查尾部否则
link.url.rsplit('/',2)[1]
为什么不干脆这么做呢
相关问题 更多 >
编程相关推荐