当我执行谷歌搜索时,如何获得带有字符串而不是生成器对象的普通列表

How do I get a normal list with strings instead of generator objects when I perform a googlesearch

您好,我正在尝试根据列表中的查询获取 google 搜索的第一个 url。为了简单起见,我将使用与 2 年前的类似问题相同的代码。

from googlesearch import search

list_of_queries = ["Geeksforgeeks", "Whosebug", "GitHub"]
results = []

for query in list_of_queries:
    results.append(search(query, tld="co.in", num=1, stop=1, pause=2))

print (results)

现在这个 returns 生成器对象列表。找到一个解决方案,通过添加

打印出结果列表
for result in results:
    print (list(results))

但是我希望结果列表采用字符串列表的形式,以便通过网络抓取 url 的数据。我找到的一种解决方案是添加

results_str = []
for result in results:
    results_str.append(list(result))

当我打印 results_str 时,我将其作为输出:

[['https://www.geeksforgeeks.org/'], ['https://whosebug.com/'], ['https://github.com/']]

正如你所看到的,我什至不能直接使用 results_str 作为 url 的列表来进行网络抓取,因为每个 url 周围都有额外的括号。我想我可以通过遵循此 answer 删除括号并因此添加

来解决它
results_str_new = [s.replace('[' and ']', '') for s in results_str]

但这只会导致 AttributeError

AttributeError: 'list' object has no attribute 'replace'

无论哪种方式,即使我确实让它工作,似乎都没有必要做所有这些工作只是为了将生成器对象列表转换为字符串以用作 urls 到 webscrape 所以我想知道如果有任何选择。我知道我的选择之一是使用硒,但我真的不想这样做,因为我不想在我 运行 我的脚本时打开 Chrome 实例的麻烦。

提前致谢

您正在返回一个字符串列表列表。要更改它,您可以使用这样的列表理解

results_str = [url for result in results for url in result]

或者如果您不想使用列表推导式,您可以从 append 更改为 extend。 Extend 只是扩展列表,其中 es append 将列表插入到列表中。

results_str = []
for result in results:
    results_str.extend(result)

看来您使用的可能是其他版本的 googlesearch。我使用的是 googlesearch-python 1.1.0,所以调用参数不同。但是,这应该有所帮助:

from googlesearch import search

list_of_queries = ["Geeksforgeeks", "Whosebug", "GitHub"]
results = []

for query in list_of_queries:
    results.extend([r for r in search(query, 1, 'en')])

print(results)

输出:

['https://www.youtube.com/c/GeeksforGeeksVideos/videos', 'https://whosebug.com/', 'https://Whosebug.blog/', 'https://github.com/']

如您所见,这是一个简单的字符串列表(在本例中为 URL)