利用python爬取谷歌趋势某个关键词的每日搜索次数

      大家好,我是带我去滑雪!本期尝试利用python爬取谷歌趋势某个关键词的每日搜索次数。

目录

1、什么是谷歌趋势?

2、爬取谷歌趋势的搜索次数有何用?

3、代码如何实现?

(1)导入相关模块

(2)解析页面结构

(3)循环爬取

(4)调用函数并初始化

(5)部分结果展示


1、什么是谷歌趋势?

     谷歌趋势(Google Trends)是由谷歌提供的一个免费的在线工具,它可以显示特定关键词或主题在一段时间内的搜索兴趣变化趋势。谷歌趋势可以帮助用户了解全球范围内或特定地区的搜索热度,以及相关的搜索查询和趋势。下面是谷歌趋势的一些主要功能和特点:

  1. 搜索兴趣趋势:谷歌趋势可以显示特定关键词或主题在一段时间内的搜索兴趣变化趋势。用户可以通过输入关键词或主题,查看其搜索频率随时间的变化趋势。结果以图表形式展示,用户可以选择不同的地区和时间范围进行比较和分析。

  2. 相关查询和主题:谷歌趋势还提供了与搜索关键词或主题相关的查询和主题建议。这些相关查询和主题可以帮助用户了解与关键词相关的其他搜索查询和话题,从而更全面地了解用户的兴趣和需求。

  3. 地域和语言分布:谷歌趋势可以显示特定关键词或主题的搜索热度在不同地区和语言上的分布情况。用户可以选择特定的国家、地区或语言,以获得相关搜索兴趣的地域分布信息。这对于市场调研、媒体策划和地区关注度分析非常有用。

  4. 热门搜索:谷歌趋势提供了热门搜索功能,显示当前热门的搜索关键词或主题。这可以让用户了解当前社会热点、事件或话题的搜索趋势和兴趣。

2、爬取谷歌趋势的搜索次数有何用?

爬取谷歌趋势中某个关键词的搜索次数可以具有以下用途:

  1. 市场调研:了解特定关键词的搜索次数可以提供对市场需求和用户兴趣的洞察。通过分析搜索次数的趋势和变化,可以评估某个产品、服务或行业的受欢迎程度和潜在市场规模。这对于制定营销策略、产品定位和市场竞争分析非常有用。

  2. SEO优化:搜索引擎优化(SEO)是提高网站在搜索引擎结果页上排名的过程。了解特定关键词的搜索次数可以帮助网站拥有者确定哪些关键词受到用户关注,并针对这些热门关键词进行内容优化。通过优化网站内容和关键词的选择,可以增加网站的曝光度和流量。

  3. 广告投放:知道特定关键词的搜索次数可以帮助广告主确定广告投放的目标受众和市场规模。根据关键词的搜索次数,可以优化广告投放的定位和策略,以提高广告的点击率和转化率。

  4. 舆情监测:特定关键词的搜索次数可以反映当前的热点事件、话题或社会关注度。通过监测关键词的搜索次数和变化,可以及时掌握公众舆论的走向和用户兴趣的变化。这对于品牌管理、危机公关和舆情分析非常有帮助。

3、代码如何实现?

(1)导入相关模块

from datetime import date, timedelta
from functools import partial
from time import sleep
from calendar import monthrange

import pandas as pd

from pytrends.exceptions import ResponseError
from pytrends.request import TrendReq

(2)解析页面结构

def get_last_date_of_month(year: int, month: int) -> date:

    return date(year, month, monthrange(year, month)[1])


def convert_dates_to_timeframe(start: date, stop: date) -> str:

    return f"{start.strftime('%Y-%m-%d')} {stop.strftime('%Y-%m-%d')}"


def _fetch_data(pytrends, build_payload, timeframe: str) -> pd.DataFrame:
    attempts, fetched = 0, False
    while not fetched:
        try:
            build_payload(timeframe=timeframe)
        except ResponseError as err:
            print(err)
            print(f'Trying again in {60 + 5 * attempts} seconds.')
            sleep(60 + 5 * attempts)
            attempts += 1
            if attempts > 3:
                print('Failed after 3 attemps, abort fetching.')
                break
        else:
            fetched = True
    return pytrends.interest_over_time()


def get_daily_data(word: str,
                 start_year: int,
                 start_mon: int,
                 stop_year: int,
                 stop_mon: int,
                 geo: str = '',
                 verbose: bool = True,
                 wait_time: float = 5.0) -> pd.DataFrame:

    start_date = date(start_year, start_mon, 1) 
    stop_date = get_last_date_of_month(stop_year, stop_mon)

    pytrends = TrendReq(hl='zh-CN', tz=360)
    build_payload = partial(pytrends.build_payload,
                            kw_list=[word], cat=0, geo=geo, gprop='')

    monthly = _fetch_data(pytrends, build_payload,
                         convert_dates_to_timeframe(start_date, stop_date))
 

(3)循环爬取

    results = {}
    current = start_date
    while current < stop_date:
        last_date_of_month = get_last_date_of_month(current.year, current.month)
        timeframe = convert_dates_to_timeframe(current, last_date_of_month)
        if verbose:
            print(f'{word}:{timeframe}')
        results[current] = _fetch_data(pytrends, build_payload, timeframe)
        current = last_date_of_month + timedelta(days=1)
        sleep(wait_time)  

    daily = pd.concat(results.values()).drop(columns=['isPartial'])
    complete = daily.join(monthly, lsuffix='_unscaled', rsuffix='_monthly')
 

(4)调用函数并初始化

start_year = 2022
start_month = 1
stop_year = 2022
stop_month = 3
keyword = "warming"
data = get_daily_data(keyword, start_year, start_month, stop_year, stop_month)
data.to_excel(r"E:\工作\硕士\博客\二次数据\数据64.xlsx")

(5)部分结果展示

date搜索次数Climate change_monthlyisPartialscaleClimate change
2017/1/11313FALSE0.131.69
2017/1/21717FALSE0.172.89
2017/1/31919FALSE0.193.61
2017/1/42222FALSE0.224.84
2017/1/52424FALSE0.245.76
2017/1/62626FALSE0.266.76
2017/1/71818FALSE0.183.24
2017/1/81717FALSE0.172.89
2017/1/92828FALSE0.287.84
2017/1/102727FALSE0.277.29
2017/1/113636FALSE0.3612.96
2017/1/123535FALSE0.3512.25
2017/1/132727FALSE0.277.29
2017/1/141818FALSE0.183.24

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/1E59qYZuGhwlrx6gn4JJZTg?pwd=2138
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

若有问题可邮箱联系:1736732074@qq.com 

博主的WeChat:TCB1736732074

有任何问题,欢迎私信博主!

   点赞+关注,下次不迷路!

 

 

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 下面是爬取CSDN中关键词为"整人"的文章链接和阅读量的Python代码: ```python import requests from bs4 import BeautifulSoup keyword = "整人" url = f"https://so.csdn.net/so/search/s.do?q={keyword}&t=blog&u=&sort=relevance&p=1" res = requests.get(url) soup = BeautifulSoup(res.text, 'html.parser') for item in soup.select('.search-list .search-item .search-content'): title = item.select('.search-title a')[0].text link = item.select('.search-title a')[0]['href'] views = item.select('.search-info span')[0].text print(f'标题: {title}') print(f'链接: {link}') print(f'阅读量: {views}') print('-'*20) ``` 注意,这个代码只能爬取第一页的文章,如果需要爬取更多页面,需要对URL进行循环更改。 ### 回答2: 下面是一个使用Python爬取CSDN中关键词“整人”的链接和阅读量并输出的示例代码: ```python import requests from bs4 import BeautifulSoup # 定义关键词和要爬取的页面数量 keyword = "整人" page_count = 5 # 根据关键词和页面数量构建URL base_url = "https://so.csdn.net/so/search/s.do?q={}&p={}".format(keyword, "{}") # 遍历每个页面 for page in range(1, page_count + 1): url = base_url.format(page) response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 获取搜索结果列表 result_list = soup.find_all("dl", class_="search-list J_search") # 遍历每个搜索结果 for result in result_list: # 获取链接 link = result.find("a", class_="title").get("href") # 获取阅读量 read_count = result.find("span", class_="link_view").text # 输出链接和阅读量 print("链接:{}".format(link)) print("阅读量:{}".format(read_count)) print("---------------------------------------") ``` 以上代码使用了`requests`库发送HTTP请求,使用了`BeautifulSoup`库解析HTML文档。首先,根据关键词和页面数量构建每个页面的URL,然后通过遍历每个页面获取搜索结果列表。接着,遍历每个搜索结果,从中提取链接和阅读量,并进行输出。 ### 回答3: 以下是用Python爬取CSDN中有关键词“整人”的链接和阅读量并输出的代码: ``` import requests from bs4 import BeautifulSoup # 搜索关键词 keyword = "整人" # 构造搜索页面的URL url = "https://so.csdn.net/so/search/s.do?p=1&q={}".format(keyword) # 发送GET请求获取搜索结果页面内容 response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") # 找到搜索结果列表所在的HTML元素 result_list = soup.find("div", class_="search-list-con") # 遍历解析每个搜索结果的标题和阅读量 for result in result_list.find_all("dl"): # 获取链接和标题 link = result.find("a")["href"] title = result.find("a").text.strip() # 获取阅读量 read_count = result.find("span", class_="read-num").text # 打印链接和阅读量 print("链接:", link) print("标题:", title) print("阅读量:", read_count) print() ``` 以上代码可以通过发送GET请求到CSDN的搜索页面,然后使用BeautifulSoup库解析返回的HTML页面内容。找到搜索列表中关于每个搜索结果的链接、标题和阅读量,并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带我去滑雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值