首页 > 解决方案 > Python - 在 Google 中搜索并收集标题和描述

问题描述

我需要在 Google 中从 CSV 文件中搜索几个词,并从 google 搜索中收集 - URL、google 描述和标题。

我设法编写了一个脚本来搜索单词,只收集 URL 并将结果存储在 CSV 文件中。我不知道如何收集 - 标题和谷歌描述。另外,如果找不到我搜索的单词,我需要返回 - “缺失结果”。

from bs4 import BeautifulSoup
from googlesearch import search
import pandas as pd

keywords = pd.read_csv('keywords.csv', header=0, index_col=None)

#print(keywords['keyword'])

df = pd.DataFrame(columns=['keyword', 'url'])

for i in keywords['keyword']:
    print('Search results for keyword: ', i)
    count = 0
    for j in search(i, tld="co.in", num=10, stop=3, pause=2, lang='en'):
        count = count + 1
        print('URL number ',count, ': ', j)
        df = df.append({'keyword': i, 'url': j}, ignore_index=True)

df.to_csv(r'final_dataset.csv', index=False)

标签: pythonpandassearchweb-scrapingbeautifulsoup

解决方案


在线 IDE 中的代码和完整示例(注意:以下代码附加到.csv,而是会覆盖现有文件):

import pandas as pd
from bs4 import BeautifulSoup
import requests, lxml

headers = {
    'User-agent':
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

keywords = pd.read_csv('keywords.csv', header=0, index_col=None)

# collected data
data = []

for query in keywords['keywords']:
  html = requests.get(f'https://www.google.com/search?q={query}', headers=headers)
  soup = BeautifulSoup(html.text, 'lxml')

  for result in soup.select('.tF2Cxc'):
    title = result.select_one('.DKV0Md').text
    link = result.select_one('.yuRUbf a')['href']
    displayed_link = result.select_one('.TbwUpd.NJjxre').text

    try:
      snippet = result.select_one('#rso .lyLwlc').text
    except: snippet = None

    print(f'{title}\n{link}\n{displayed_link}\n{snippet}\n')

    # appending all data to array as dict()
    data.append({
      'title': title,
      'link': link,
      'displayed link': displayed_link,
      'snippet': snippet
    })

  # create dataframe and save it as .csv
  df = pd.DataFrame(data)
  df.to_csv('bs4_final.csv', index=False)

或者,您也可以使用来自 SerpAPI的Google Organic Results API作为评论中提到的αԋɱҽԃ αмєяιcαη来做到这一点。这是一个带有免费计划的付费 API。

主要区别在于您只需要迭代 JSON 字符串而不做任何额外的事情。

要集成的代码:

from serpapi import GoogleSearch
import os
import pandas as pd

keywords = pd.read_csv('keywords.csv', header=0, index_col=None)

for query in keywords['keywords']:
    params = {
      "api_key": os.getenv("API_KEY"),
      "engine": "google",
      "q": query,
      "hl": "en",
    }

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

    data = []

    for result in results['organic_results']:
        title = result['title']
        link = result['link']
        displayed_link = result['displayed_link']
        snippet = result['snippet']
                
        print(f"{title}\n{link}\n{displayed_link}\n{snippet}\n")

        data.append({
          'title': title,
          'link': link,
          'displayed link': displayed_link,
          'snippet': snippet
        })

    df = pd.DataFrame(data)
    df.to_csv('serpapi_final.csv', index=False)

PS - 我写了一篇关于如何抓取谷歌有机搜索结果的带有视觉效果 ( gif ) 的博客文章。

免责声明,我为 SerpApi 工作。


推荐阅读