Duckduckgo API получает результаты поиска

То, что я хочу сделать, это просто отправить строковые запросы (эквивалент ввода вручную в строку поиска) и сохранить URL-адрес первых результатов (если они есть).

Я задал похожий вопрос ( поиск в Python), и ответ на него хорошо работает с Google, моя проблема в том, что я не могу найти адрес API поиска Duckduckgo в любом месте. Не могли бы вы помочь мне или предложить другой способ сделать это?

4 ответа

Решение

tl;dr - очистка экрана https://duckduckgo.com/html/?q={search_terms}

Как уже упоминали другие авторы, URL для API DuckDuckGo:

http://api.duckduckgo.com/?q=x&format=json

x быть поисковыми терминами, которые вы ищете.

Тем не менее, обратите внимание, что это не полный API поиска. Как упоминает API-страница DuckDuckGo,

Однако этот API не включает в себя все наши ссылки. То есть это не полный API результатов поиска или способ получения результатов DuckDuckGo в ваших приложениях, помимо наших мгновенных ответов. Из-за того, как мы генерируем результаты поиска, мы, к сожалению, не имеем права полностью объединять наши результаты. По той же причине мы не можем допустить, чтобы наши результаты были представлены без нашего брендинга. Пожалуйста, посетите нашу страницу партнерства для получения дополнительной информации о руководящих принципах и свяжитесь с нами.

Это API для мгновенного ответа, а не API для полных результатов. Тем не менее, есть некоторые веб-ссылки в нем, например, официальные сайты.

Так что для вашей заявленной цели

просто отправив строковые запросы (эквивалент ввода текста в строку поиска вручную) и сохранив URL первых результатов (если они есть).

api.duckduckgo.com не получит то, что вы хотите.

Ваш лучший выбор, вероятно, состоит в том, чтобы просто отсканировать экранную версию DuckDuckGo не-JS:

https://duckduckgo.com/html/?q=x

ищу элементы с селектором чего-то вроде div.result или же div.web-result,

Просто измените то, что вы хотите найти. Это выведет результаты в формате JSON

https://api.duckduckgo.com/?q=<your search string>&format=json&pretty=1&no_html=1&skip_disambig=1

Я думаю, это то, что вы просите

www.api.duckduckgo.com/?q=Search& = Формат JSON & довольно = 1

Пример: http://api.duckduckgo.com/?q=DuckDuckGo&format=json&pretty=1

Ответ представляет собой объект JSON, вы можете найти адрес первой ссылки:

response.Results[0].FirstURL

Вы можете узнать это, поместив ответ в https://jsonformatter.curiousconcept.com/

Надеюсь, это помогло:)

Если вы также заинтересованы в получении расширенных результатов («Последние новости», «Изображения для запроса», «График знаний» и т. д.), веб-версия DuckDuckGo без JS: https://duckduckgo.com/html/ НЕ предоставит это для вас.

Чтобы получить ПОЛНУЮ страницу DuckDuckGo, лучше всего запросить следующую ссылку: https://links.duckduckgo.com/d.js?. Вы можете найти его, просмотрев вкладку сети.

Здесь хранятся все результаты.

Example for search query: "bill gates": https://links.duckduckgo.com/d.js?q=bill%20gates&amp;amp;kl=us-en&amp;amp;l=us-en&amp;amp;s=0&amp;amp;ct=US&amp;amp;ss_mkt=us&amp;amp;vqd=3-41771934349821924699896735607141847775-125937012480658240237583475471092551742

Здесь есть два обязательных параметра. Во-первых, это запрос q, второй — токен поиска.

токен уникален для каждого поиска и привязан к запросу, поэтому вы не сможете повторно использовать токен с другим запросом. Кроме того, я думаю, что срок годности у него 48 часов.

Я пытался реконструировать токен, но, насколько мне известно, он генерируется на стороне сервера, и сделать это невозможно.

Еще один параметр, о котором стоит упомянуть, это s, он используется для разбиения на страницы. Он определяет смещение результата и пропускает заданное количество результатов.


Таким образом, поток для получения результатов будет следующим:

  1. Перейдите по ссылке: https://duckduckgo.com/?q=bill+gates и получите токен поиска.

  1. Использовать vqdтокен для создания URL-адреса запроса: https://links.duckduckgo.com/d.js

В качестве альтернативы вы можете использовать стороннее решение, такое как SerpApi, оно сделает все это и многое другое за вас.

Пример кода Python (также доступен в других библиотеках):

      from serpapi import GoogleSearch

params = {
  "api_key": "secret_api_key",
  "engine": "duckduckgo",
  "q": "bill gates",
  "kl": "us-en"
}

search = GoogleSearch(params)
results = search.get_dict()

Пример вывода JSON:

      "organic_results": [
  {
    "position": 1,
    "title": "Bill Gates - Wikipedia",
    "link": "https://en.wikipedia.org/wiki/Bill_Gates",
    "snippet": "Early life. Bill Gates was born in Seattle, Washington, on October 28, 1955. He is the son of William H. Gates Sr. (1925-2020) and Mary Maxwell Gates (1929-1994). His ancestry includes English, German, and Irish/Scots-Irish. His father was a prominent lawyer, and his mother served on the board of directors for First Interstate BancSystem and the United Way of America.",
    "favicon": "https://external-content.duckduckgo.com/ip3/en.wikipedia.org.ico",
    "sitelinks": [
      {
        "title": "Bill Gates Sr",
        "link": "https://en.wikipedia.org/wiki/Bill_Gates_Sr."
      },
      {
        "title": "Bill & Melinda Gates Foundation",
        "link": "https://en.wikipedia.org/wiki/Bill_%26_Melinda_Gates_Foundation"
      },
      {
        "title": "The World's Billionaires",
        "link": "https://en.wikipedia.org/wiki/The_World%27s_Billionaires"
      },
      {
        "title": "Bill Gates's House",
        "link": "https://en.wikipedia.org/wiki/Bill_Gates%27s_house"
      },
      {
        "title": "Mary Maxwell Gates",
        "link": "https://en.wikipedia.org/wiki/Mary_Maxwell_Gates"
      },
      {
        "title": "Paul Allen",
        "link": "https://en.wikipedia.org/wiki/Paul_Allen"
      }
    ]
  },
  ...
],
"knowledge_graph": {
  "title": "Bill Gates",
  "description": "William Henry Gates III is an American business magnate, software developer, investor, author, and philanthropist. He is a co-founder of Microsoft Corporation, along with his late childhood friend Paul Allen. During his career at Microsoft, Gates held the positions of chairman, chief executive officer, president and chief software architect, while also being the largest individual shareholder until May 2014. He is considered one of the best known entrepreneurs of the microcomputer revolution of the 1970s and 1980s. Gates was born and raised in Seattle, Washington. In 1975, he and Allen founded Microsoft in Albuquerque, New Mexico. It became the world's largest personal computer software company. Gates led the company as chairman and CEO until stepping down as CEO in January 2000, succeeded by Steve Ballmer, but he remained chairman of the board of directors and became chief software architect.",
  "website": "https://www.gatesnotes.com",
  "thumbnail": "https://duckduckgo.com/i/45eb7625.jpg",
  "facts": {
    "born": "William Henry Gates III, October 28, 1955, Seattle, Washington, U.S.",
    "education": "Harvard University (dropped out)",
    "occupation": "Software developer, investor, entrepreneur",
    ...
  },
  ...
},
"news_results": [
  {
    "position": 1,
    "title": "Bill Gates admitted 'messing up' marriage at 'moving' Sun Valley panel, report claims",
    "link": "https://news.yahoo.com/bill-gates-admitted-messing-marriage-174024577.html",
    "snippet": "Microsoft co-founder Bill Gates has purportedly confessed to \"messing up\" his marriage to his ex-wife Melinda French Gates, according to a report. The New York Post reported that the tech giant made the comments during an \"off the record\" question-and-answer session at an exclusive Sun Valley conference last week.",
    "source": "YAHOO!News",
    "date": "20 hours ago",
    "thumbnail": "https://s.yimg.com/uu/api/res/1.2/56GaZKhuq0Dq.TS8WNZL9g--~B/aD03Njg7dz0xMDI0O2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/the_independent_635/0b4d2e20d6c2c4ecb1565ae82180ee6a"
  },
  ...
],
"inline_images": [
  {
    "position": 1,
    "title": "Bill Gates says Jobs was a wizard in getting staff to keep ...",
    "link": "https://www.cnbc.com/2019/07/07/bill-gates-says-jobs-was-a-wizard-in-getting-staff-to-keep-apple-alive.html",
    "thumbnail": "https://tse1.mm.bing.net/th?id=OIP.5WUHRMXHSmzjh9W7HP80hQHaE8&pid=Api",
    "image": "https://image.cnbcfm.com/api/v1/image/105894488-15571466884731u8a0002r.jpg?v=1557843920"
  },
  ...
],
"related_searches": [
  {
    "query": "bill gates age",
    "link": "https://duckduckgo.com/?q=bill%20gates%20age"
  },
  {
    "query": "bill gates investments in china",
    "link": "https://duckduckgo.com/?q=bill%20gates%20investments%20in%20china"
  },
  {
    "query": "news about bill gates",
    "link": "https://duckduckgo.com/?q=news%20about%20bill%20gates"
  },
  ...
]

Ознакомьтесь с документацией для более подробной информации.

Отказ от ответственности: я работаю в SerpApi.

Другие вопросы по тегам