目前在第二步骤就出现被google屏蔽ip问题这个情况如何修改?
1.从Azure Blob存储中获取最新的关键词报告。
2.对每个关键词进行Google搜索,提取排名信息和前三个搜索结果的页面信息。
3.从站点地图XML文件中提取URL,并获取每个URL的页面信息。
4.将所有收集到的数据整理成DataFrame,以便进一步分析和处理。
目前已经尝试了的方法
使用代理IP
增加请求间隔
用户代理(User-Agent)轮换
上述都不能解决问题
{
遍历关键词列表 keywords:
尝试:
随机等待 30 到 55 秒
初始化变量:
companyFound = False
foundedRank = 0
foundedCompanyUrl = ''
rank = 0
urlsDict = {'Number 1 Url': '', 'Number 2 Url': '', 'Number 3 Url': ''}
page_num = 0
found = False
empty_first_url_count = 0 # 初始化计数器,记录连续出现第一名 URL 为空的次数
循环遍历搜索结果页面,直到达到 num_of_pages 页:
构造 Google 搜索结果页面的 URL
启动无头浏览器
打开搜索结果页面 URL
使用 BeautifulSoup 解析页面内容
提取所有搜索结果
遍历每个搜索结果:
如果在第一页,且结果在前三名:
获取结果的 URL 并打开
初始化 urlsDict2 字典
获取页面源代码并使用 BeautifulSoup 解析
提取页面标题、H1 标签、OG 标题和OG 描述
将数据添加到 urlsDict2
将 urlsDict2 添加到 topUrlsData 列表中
增加排名计数器 rank
获取结果的公司 URL
如果找到的公司 URL 等于目标域名且 found 为 False:
设置 found 为 True
设置 companyFound 为 True
记录排名 foundedRank
记录公司 URL foundedCompanyUrl
跳出内部循环
如果 found 为 True, 跳出外部循环
增加页面计数器 page_num
如果第一页的第一名 URL 为空:
增加 empty_first_url_count 计数器
否则:
重置 empty_first_url_count 计数器为 0
如果 empty_first_url_count 连续达到 3:
报错并停止循环: error: IP is blocked by Google
打印关键词及其排名
如果未找到公司 URL:
设置 foundedRank 和 foundedCompanyUrl 为 None
将结果添加到 DataFrame 中:
df.loc[i, 'Keywords'] = 关键词
df.loc[i, 'Rank'] = 排名
df.loc[i, 'Date'] = 当前日期
df.loc[i, 'CompanyURL'] = 公司 URL
df.loc[i, 'Number 1 Url'] = 第一名 URL
df.loc[i, 'Number 2 Url'] = 第二名 URL
df.loc[i, 'Number 3 Url'] = 第三名 URL
增加计数器 i
如果发生异常:
将错误信息添加到 DataFrame 中:
df.loc[i, 'Keywords'] = 关键词
df.loc[i, 'Rank'] = 错误信息
df.loc[i, 'Date'] = 当前日期
df.loc[i, 'CompanyURL'] = 错误信息
df.loc[i, 'Number 1 Url'] = None
df.loc[i, 'Number 2 Url'] = None
df.loc[i, 'Number 3 Url'] = None
增加计数器 i
}