Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让我的代码停止在我的网络爬虫中打印关键字_Python_Beautifulsoup_Web Crawler_Python Requests - Fatal编程技术网

Python 如何让我的代码停止在我的网络爬虫中打印关键字

Python 如何让我的代码停止在我的网络爬虫中打印关键字,python,beautifulsoup,web-crawler,python-requests,Python,Beautifulsoup,Web Crawler,Python Requests,python新手,只是在玩一个使用bs4和请求模块的网络爬虫。目前,代码一直在我的关键字实例中打印,我想知道如何让它只打印一次。 我是否使用“break”以及在哪里将其插入代码 import requests from bs4 import BeautifulSoup # Test for agency offering scrape def seo(url): result = requests.get(url) soup = BeautifulSoup(result.tex

python新手,只是在玩一个使用bs4和请求模块的网络爬虫。目前,代码一直在我的关键字实例中打印,我想知道如何让它只打印一次。 我是否使用“break”以及在哪里将其插入代码

import requests
from bs4 import BeautifulSoup

# Test for agency offering scrape
def seo(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text)
    lowercased = result.text.lower()
    keywords = ['creative']
    for keyword in keywords:
        if keyword.lower() in lowercased:
            print (keyword)

    links = soup.find_all('a')[1:]
    for link in links:
        seo(link['href'])
seo("http://www.daileyideas.com/")

您应该从
seo
返回指示找到匹配项的内容。然后调用代码可以检查该返回值,当返回值指示存在匹配时,它可以跳出循环:

def seo(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text)
    lowercased = result.text.lower()
    keywords = ['creative']
    for keyword in keywords:
        if keyword.lower() in lowercased:
            print (keyword)
            return True # Found a match

    links = soup.find_all('a')[1:]
    for link in links:
        if seo(link['href']):
            return True
    return False # No match

如果要在找到关键字时退出函数,请返回:

def seo(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text)
    lowercased = result.text.lower()
    found=False
    keywords = ['creative']
    print keywords[0] in lowercased
    for keyword in keywords:
        if keyword.lower() in lowercased:
            found =True
    links = soup.find_all('a')[1:]
    for link in links:
        if not found:
            seo(link['href'])
        else:
            print(keyword)
            return 
此函数将获取第一页上的所有链接,并访问每个链接,直到找到关键字或链接用尽:

import urlparse
def seo(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text)
    links = [urlparse.urljoin(url, tag['href']) for tag in soup.findAll('a', href=True)] # get all links on the page
    lower_cased = result.text.lower()
    keywords = ['creative']
    while links: # keep going until list is empty
        for keyword in keywords:
            if keyword.lower() in lower_cased:
                print "Success we found the keyword: {}".format(keyword)
                return
        link = links.pop() # get next link to check
        result = requests.get(link)
        lower_cased = result.text.lower()

在递归搜索中,您需要设置一些深度限制,或者如果找不到关键字,您的搜索将继续进行。有工具来做你想做的事情,所以如果你真的想做,那就值得去看看。

你的预期行为是什么还不清楚。是否要在
小写的
中找到关键字后立即停止对
链接的迭代?是,很抱歉,这是一个新问题,我的问题可能不在有经验的pythoner的上下文中。如果在上一个循环中结束函数,您希望如何处理链接中的
:循环?因此,当我在控制台中输入此代码时。它不断打印“创造性”,看起来像是一个连续的循环。我想在循环只找到一个实例时停止它。(如果有道理的话。)@user3802773,我添加了一个答案,但我认为可能有更简单的方法来做你想做的事。很棒的东西谢谢!我刚刚添加了“返回关键字”,效果很好!谢谢你的帮助,不客气。使用break只会退出该循环并移动到下一个循环。注意,如果访问的第一个url不包含关键字,这将无法按预期工作。一旦你进入第二个for循环,你将一直呆在其中直到它完成,即使你多次
打印关键字
。@user3802773,我编辑了我的代码,你的代码中还有另一个问题,我稍后会解决,我在手机上,所以atm会在我回到电脑时编辑。是的,这也可以!谢谢感谢您也编辑了我的代码,因为我是新手。
links=soup.find_all('a')[1://code>将永远无法访问。