以编程方式从Google自定义搜索JSON API中排除/包含网站

问题描述 投票:0回答:2

我正在使用Google Custom Search JSON API检索json格式的搜索结果。

问题在于,每次请求仅允许10个结果。因此,我们需要进行多次调用以提取更多结果。

但是,当我重做一个呼叫时,如何排除上一个呼叫中已经获取的结果?

一种手动方法是在搜索中添加每一行,但是有没有办法以编程方式执行此操作?

python google-custom-search
2个回答
1
投票

将以下内容想象为从output返回的API

from bs4 import BeautifulSoup

html = """
<a class="result" href="www.test1.com" </a>
<a class="result" href="www.test1.com" </a>
<a class="result" href="www.test2.com" </a>
<a class="result" href="www.test2.com" </a>
<a class="result" href="www.test3.com" </a>
<a class="result" href="www.test3.com" </a>
"""


soup = BeautifulSoup(html, 'html.parser')


urls = [url.get("href") for url in soup.findAll("a", class_="result")]

print(set(urls))

输出:

{'www.test3.com', 'www.test2.com', 'www.test1.com'}

如您所见,set实际上是删除重复项,但它并不关心顺序。

但是如果您关心订单。因此请使用list,如下所示:

items = []

for item in soup.findAll("a", class_="result"):
    item = item.get("href")
    if item not in items:
        items.append(item)

print(items)

输出:

['www.test1.com', 'www.test2.com', 'www.test3.com']

因此您可以将calls循环到APIadd进行设置,或将append循环到list


0
投票

也许我误解了这个问题,但是'start'参数是您如何对结果进行分页。参见https://developers.google.com/custom-search/v1/cse/list

© www.soinside.com 2019 - 2024. All rights reserved.