Python网络爬虫,只打印在它的路径中包含某些单词的链接,漂亮的汤

2024-10-01 09:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个网络爬虫,它打印出所有来自给定站点的链接,而不重复相同的链接。我的代码(带有已导入但尚未使用的库)如下所示:

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

有什么建议吗?在


Tags: frombrimportrehttpurl链接link
2条回答

是的,这就像在上面使用regex或普通的旧Python字符串find()一样简单链接.url. (编辑:您也可以像shshank那样使用'kontakt' in link.url

for link in br.links(text_regex=re.compile('^((?!IMG).)*$')):

    if link.url.find('kontakt')>=0: ...do stuff on urls containing contact
    # or:
    if link.url.find('kontakt')<0: continue # skip urls without

显然这两种方法(stringfind()方法或in运算符)都可以匹配字符串中的任何位置,这有点草率。 你想在这里做的只是在url尾部进行匹配。 您可以使用find()link.url.split('/')[-1]上检查尾部

否则link.url.rsplit('/',2)[1]

为什么不干脆这么做呢

if 'kontakt' in url:
    print url
else:
    continue

相关问题 更多 >