我正在使用Google Custom Search JSON API检索json格式的搜索结果。
问题在于,每次请求仅允许10个结果。因此,我们需要进行多次调用以提取更多结果。
但是,当我重做一个呼叫时,如何排除上一个呼叫中已经获取的结果?
一种手动方法是在搜索中添加每一行,但是有没有办法以编程方式执行此操作?
将以下内容想象为从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
循环到API
和add
进行设置,或将append
循环到list
。
也许我误解了这个问题,但是'start'参数是您如何对结果进行分页。参见https://developers.google.com/custom-search/v1/cse/list