有没有一种有效的方法来使用Python访问搜索引擎针对特定查询返回的结果数量?

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

我在 .csv 文件中有一个大型实体数据集(大约 40,000 个),并且希望通过存储搜索时返回的搜索结果数量来存储它们的受欢迎程度。所以,我正在努力快速可靠地完成它。它不一定非常准确,但这是我认为很好地衡量其公众重要性的最佳方式。我正在使用 Python 3.X 解决这个问题

我尝试过使用漂亮的汤,但它并不总是返回值。事实上,如果我搜索一些不太流行的东西,它会显示值不存在,但是如果我在实际的浏览器上搜索它然后运行程序,它就会给出输出。这并不真正可靠。我发现这是由于页面的某些 JavaScript 动态加载而发生的。

import requests
import urllib3
from bs4 import BeautifulSoup

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def get_search_results_count(query):
    search_url = f"https://www.bing.com/search?q={query}"

    response = requests.get(search_url, verify=False)

    soup = BeautifulSoup(response.content, "html.parser")

    count_element = soup.find("span", class_="sb_count")

    if count_element:
        count_text = count_element.text.strip()
        return count_text
    else:
        return "Search results count not found"

search_query = "cheese"
result_count = get_search_results_count(search_query)
print(result_count)
numeric_part = ''.join(filter(str.isdigit, result_count))
print(numeric_part)

因此,我尝试使用Selenium,但是需要太多时间。另外,它实际上打开了我电脑上的搜索引擎,然后将其关闭,所以效率似乎相当低。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

def get_search_results_count(query):
    driver = webdriver.Edge()

    try:
        # Construct the search URL
        search_url = f"https://www.bing.com/search?q={query}"
        driver.get(search_url)

        count_element = driver.find_element(By.CLASS_NAME, "sb_count")
        count_text = count_element.text.strip()
        return count_text
    except NoSuchElementException:
        return "Search results count not found"
    finally:
        driver.quit()


search_query = input("Enter the Company and Product name as one...:\n")
result_count = get_search_results_count(search_query)
print(result_count)
numeric_part = ''.join(filter(str.isdigit, result_count))
search_results = numeric_part

我真的不知道该怎么办。我不想与实际的搜索结果有任何关系,我只想知道返回的金额。我曾经看到有人建议使用 Google 搜索 API,但它似乎与我只想要结果编号的问题无关,而且它似乎对我来说太复杂了,无法弄清楚,如果有人可以帮助我解决这个问题,那么那就太好了。

python python-3.x web-scraping
1个回答
0
投票

考虑到数据集的大小,网络抓取方法可能无法完成此任务,并且您可以比仅通过搜索结果数量来衡量公共重要性更好。一种简单的方法是使用 Google 趋势。在 python 中,您可以使用

pytrends
模块,并提取某种类似于搜索结果数量的流行指数,您可以执行以下操作:

from pytrends.request import TrendReq
pytrends = TrendReq(hl='en-US', tz=0, timeout=None)
keywords = ["dataset"]
pytrends.build_payload(keywords, timeframe='2015-01-01 2024-01-01')

这仍然存在速率限制的问题,因为它是非官方 API,但由于您实际上并未执行搜索,而是查询数据,因此它的性能可能比您当前的解决方案更好。

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