在当今众多可用的搜索引擎中,Yandex 是一个突出的参与者,特别是在俄罗斯和邻国。正如谷歌在世界许多地区占据主导地位一样,Yandex 在俄罗斯也占有重要的市场份额,据估计,它占据了该国 50% 以上的搜索引擎市场。除了搜索之外,Yandex 的生态系统还包含服务,拥有 20 多种产品和服务(包括地图、邮件和云存储),可满足不同的用户需求。根据最新统计数据,Yandex 每月处理数十亿次搜索查询,使其成为那些希望抓取 Yandex 数据的人(无论是企业、研究人员还是数据爱好者)的主要目标。

然而,手动访问和分析大量数据可能需要时间和精力。这就是 Yandex 网络抓取发挥作用的地方。通过利用 Python 和 Crawlbase 爬取 API,我们可以自动化收集和抓取 Yandex 搜索结果的过程,提供可推动决策和研究的有价值的见解和数据点。

在本指南中,我们将深入研究网络抓取的世界,特别关注如何抓取 Yandex 搜索结果。无论您是想了解 Yandex 的结构、设置环境以有效地抓取 Yandex 还是存储抓取的数据以供将来分析,本指南都会涵盖。

目录

  1. 为什么要抓取 Yandex 搜索结果?
  • Yandex 搜索结果的好处
  • Yandex 数据的实际用途
  1. 了解 Yandex 的结构
  • Yandex 搜索页面的布局和结构
  • 要提取的关键数据点
  1. 设置您的环境
  • 安装 Python 和所需的库
  • 选择正确的开发 IDE
  • Crawlbase 注册和 API 令牌
  1. 获取和解析搜索结果
  • 制作有针对性的抓取 URL
  • 使用爬网 API 发出 HTTP 请求
  • 检查 HTML 以获取 CSS 选择器
  • 提取搜索结果详细信息
  • 处理分页
  1. 存储抓取的数据
  • 将抓取的数据存储在 CSV 文件中
  • 将抓取的数据存储在 SQLite 数据库中
  1. 总结
  2. 常见问题解答

为什么要抓取 Yandex 搜索结果?

当您在 Yandex 中输入内容并点击搜索时,您会得到很多结果。您是否想过可以利用这些结果做更多​​的事情?这就是抓取的用武之地。让我们深入了解为什么抓取 Yandex 可以改变游戏规则。

Yandex 搜索结果的好处

Yandex 搜索结果的好处
  1. 发现趋势:Yandex 为我们提供了了解在线动态的窗口。我们可以通过研究搜索模式来确定哪些主题或产品正在变得流行。例如,如果许多人在十月份搜索“冬季夹克”,则暗示冬季购物趋势正在提前开始。
  2. 了解你的竞争对手:如果您拥有一家企业或一个网站,您会想知道自己与其他人相比如何。通过抓取 Yandex,您可以查看哪些网站经常出现在与您的领域相关的搜索中。这可以让您深入了解其他人做得对的地方以及您可能需要赶上的地方。
  3. 内容创建:您是博主、视频博主还是作家?了解人们在 Yandex 上寻找什么可以指导您的内容创作。如果“简单的饼干食谱”很流行,也许是时候分享您最喜欢的饼干食谱或制作有关它的视频了。
  4. 提升您自己的网站:每个网站都希望出现在 Yandex 的首页上。网站所有者可以通过了解搜索模式和流行关键词来调整其内容。这样,当有人搜索相关主题时,它们就有更好的机会出现。

Yandex 数据的实际用途

  • 比较价格:许多人在购买商品之前会在不同网站上查看价格。您可以通过抓取 Yandex 来收集此价格数据并做出明智的决策。
  • 研究与学习:对于学生、教师或任何好奇的人来说,Yandex 搜索数据可能是一座金矿。您可以了解不同地区人们的兴趣、关注点和问题。
  • 新闻与报道:记者和新闻媒体可以使用 Yandex 数据来了解哪些新闻主题正在受到关注。这有助于他们确定故事的优先顺序并提供引起读者共鸣的内容。

总而言之,Yandex 搜索结果不仅仅是一个列表。它们提供了有关人们在网上的想法、搜索和需求的宝贵见解。通过抓取和分析这些数据,我们可以做出更明智的决策,创造更好的内容,并在数字游戏中保持领先地位。

了解 Yandex 的结构

当您访问 Yandex 并输入搜索时,您看到的页面不是随机的。它是以特定方式设计的。让我们简要地了解一下 Yandex 的搜索页面是如何组合在一起的,以及我们可以从中挑选出的基本内容。

Yandex 搜索页面的布局和结构

想象一下你正在看一份报纸。顶部有标题,中间有主要故事,两侧有一些广告或旁白。 Yandex 的搜索页面有点类似。

Yandex 搜索结果
  • 搜索栏:您可以在此处输入您要查找的内容。
  • 搜索结果:输入后,您将获得与您的搜索相关的网站列表。这些是主要故事,就像报纸上的主要新闻文章一样。
  • 侧面信息:有时,侧面会有多余的部分。这些可能是广告、相关搜索或常见问题的快速解答。
  • 页脚:底部可能有其他 Yandex 服务的链接或有关隐私和条款的更多信息。

要提取的关键数据点

现在我们知道了 Yandex 页面的外观,我们可以从中获取哪些信息?

  1. 搜索结果: 这是我们最想要的。这是与我们的搜索相关的网站列表。如果我们进行抓取,我们会专注于获取这些网站链接。
  2. 网站标题:每个链接旁边都有一个标题。这个标题可以让您快速了解该网站的内容。
  3. 网站说明:标题下通常有来自网站的小描述或片段。这可以告诉我们更多有关网站内容的信息,而无需点击它。
  4. 广告:有时,前几个结果可能是广告。这些网站向 Yandex 付费才能显示在顶部。知道哪些结果是广告,哪些结果是有机的(不付费的)是很好的。
  5. 相关搜索:在页面底部,其他搜索建议可能与您键入的内容相关。这些可以为更多搜索或相关主题提供想法。

了解 Yandex 的结构有助于我们知道在抓取时要关注哪里以及要关注什么。了解布局和关键数据点使我们能够更有效地收集所需的信息。

设置您的环境

在抓取 Yandex 搜索结果之前,我们必须确保我们的设置已准备就绪。我们必须安装所需的工具和库,选择正确的 IDE,并获取关键的 API 凭据。

安装 Python 和所需的库

  • 设置环境的第一步是确保系统上安装了 Python。如果您还需要安装Python,请从官网下载: 蟒蛇网.

  • 安装 Python 后,下一步是确保您拥有该项目所需的库。 在我们的例子中,我们需要三个主要库:

    • Crawlbase Python 库:该库将用于制作 HTTP请求 使用 Crawlbase 抓取 API 访问 Yandex 搜索页面。要安装它,您可以使用 pip 和以下命令:
    1
    点安装爬虫库
    • 美汤4:Beautiful Soup 是一个 Python 库,可以轻松地从网页中抓取和解析 HTML 内容。 它是从网络中提取数据的关键工具。 您可以使用 pip 安装它:
    1
    点安装beautifulsoup4
    • 熊猫:Pandas 是 Python 中一个强大的数据操作和分析库。 我们将用它来存储和管理抓取的数据。 使用 pip 安装 pandas:
    1
    pip 安装熊猫

选择正确的开发 IDE

集成开发环境 (IDE) 提供具有代码突出显示、自动完成和调试工具等功能的编码环境。 虽然您可以在简单的文本编辑器中编写 Python 代码,但 IDE 可以显着改善您的开发体验。

以下是一些值得考虑的流行 Python IDE:

  1. PyCharm:PyCharm 是一个强大的 IDE,具有免费的社区版。 它提供代码分析、可视化调试器和 Web 开发支持等功能。

  2. Visual Studio 代码(VS 代码):VS Code 是 Microsoft 开发的免费开源代码编辑器。 其庞大的扩展库使其能够适用于各种编程任务,包括网络抓取。

  3. Jupyter笔记本:Jupyter Notebook 非常适合交互式编码和数据探索。 它通常用于数据科学项目。

  4. Spyder的:Spyder 是一款专为科学和数据相关任务而设计的 IDE。 它提供了变量浏览器和交互式控制台等功能。

Crawlbase 注册和 API 令牌

要使用 Crawlbase 抓取 API 向 Yandex 发出 HTTP 请求,您必须在 抓取基地网站。 现在,让我们为您设置一个 Crawlbase 帐户。 按着这些次序:

  1. 访问 Crawlbase 网站:打开网络浏览器并导航至 Crawlbase 网站 注册 页面开始注册过程。
  2. 提供您的详细信息:系统会要求您提供电子邮件地址并为您的 Crawlbase 帐户创建密码。 填写所需信息。
  3. 企业验证:提交详细信息后,您可能需要验证您的电子邮件地址。 检查您的收件箱中是否有来自 Crawlbase 的验证电子邮件,然后按照提供的说明进行操作。
  4. 登录 :验证您的帐户后,返回 Crawlbase 网站并使用您新创建的凭据登录。
  5. 访问您的 API 令牌:您需要 API 令牌才能使用 Crawlbase 爬网 API。 您可以找到您的代币 此处.

备注:Crawlbase 提供两种类型的令牌,一种用于静态网站,另一种用于动态或 JavaScript 驱动的网站。由于我们正在抓取 Yandex,因此我们将选择普通代币。 Crawlbase 慷慨地为 Crawling API 提供 1,000 个免费请求的初始限额,使其成为我们网络抓取项目的绝佳选择。

安装了 Python 和所需的库、设置了您选择的 IDE 并掌握了 Crawlbase 令牌后,您就可以开始抓取 Yandex 搜索结果了。

获取和解析搜索结果

抓取 Yandex 搜索结果时,该过程涉及多个步骤,从制作正确的 URL 到处理动态内容。本部分将引导您完成每个步骤,确保您有一个清晰的路线图来成功获取和解析 Yandex 搜索结果。

制作有针对性的抓取 URL

与许多搜索引擎一样,Yandex 提供了一种简单的方法来为特定搜索查询构建 URL。通过了解这种结构,您可以定制抓取过程以准确获取您需要的内容。

  • 基本结构:典型的 Yandex 搜索 URL 以主域开头,后跟搜索参数。例如:
1
2
# 将 your_search_query_here 替换为所需的搜索词。
https://yandex.ru/search/?text=your_search_query_here
  • 进阶参数:Yandex 提供各种参数,可实现更精细的搜索。一些常见参数包括:
    • &lr=:添加“lr”参数,后跟语言代码,以便仅显示该语言的结果。
    • &p=:用于分页,允许您浏览不同的结果页面。
  • 喷码:确保搜索查询已正确编码。这一点至关重要,尤其是当您的搜索词包含特殊字符或空格时。您可以使用 Python 库,例如 urllib.parse 无缝地处理这种编码。

通过掌握在 Yandex 上进行有针对性抓取的 URL 制作技巧,您可以提取精确且相关的数据,确保您的抓取工作产生有价值的见解。

使用爬网 API 发出 HTTP 请求

获得 URL 后,下一步就是获取搜索结果页面的 HTML 内容。 Yandex 等平台会监控来自同一 IP 的频繁请求,这可能会导致限制或禁止。这就是 Crawlbase 爬行 API 的闪光点,它通过其 IP 轮换机制提供了解决方案。

让我们使用“Winter Jackets”作为我们的目标搜索查询。下面的代码片段说明了如何利用 Crawling API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 爬行基地 进口 抓取API
urllib.parse 进口 报价

API_TOKEN = 'YOUR_CRAWLBASE_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})

网址= f'https://yandex.com/search/?text=${引用(“冬季夹克”)}'

响应=crawling_api.get(url)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
打印(html_内容)
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")

执行脚本

确保环境已设置并安装了必要的依赖项后,运行脚本变得轻而易举:

  1. 保存脚本 .py 扩展名,例如 yandex_scraper.py.
  2. 启动终端或命令提示符。
  3. 导航到包含脚本的目录。
  4. 使用以下命令执行脚本: python yandex_scraper.py.

通过执行此脚本,它将与 Yandex 交互,搜索“Winter Jackets”,并在终端中显示 HTML 内容。

输出 HTML 快照

检查 HTML 以获取 CSS 选择器

利用从搜索结果页面获取的 HTML 内容,下一步是分析其结构并查明定价数据的位置。这项任务正是 Web 和浏览器开发工具来帮助我们解决的。让我们概述一下如何检查 HTML 结构并挖掘那些宝贵的 CSS 选择器:

Yandex 搜索结果检查
  1. 打开网页:导航到您要抓取的 Yandex 搜索 URL 并在网络浏览器中将其打开。
  2. 右键单击并检查:在要提取的元素上使用右键单击能力,然后从上下文菜单中选择“检查”或“检查元素”。这个神秘的咒语将召唤浏览器的开发工具。
  3. 找到 HTML 源代码:在开发者工具的范围内,网页的 HTML 源代码将揭露其秘密。 将光标悬停在 HTML 面板中的各个元素上,然后见证网页的相应部分神奇地亮起。
  4. 识别 CSS 选择器:要从特定元素中释放数据,请在开发人员工具中右键单击它,然后优雅地选择“复制”>“复制选择器”。 这个优雅的操作会将该元素的 CSS 选择器传输到剪贴板,准备好在网页抓取咒语中使用。

一旦有了这些选择器,您就可以继续构建 Yandex 抓取工具以有效地提取所需的信息。

提取搜索结果详细信息

Python 提供了方便的工具来导航和理解 Web 内容,BeautifulSoup 是一个出色的选择。

之前,我们精确定位了特定的代码,称为 CSS 选择器,其作用类似于标记,将我们的程序精确地定向到网页上我们需要的数据。例如,我们可能需要标题、URL 和搜索结果描述等详细信息。此外,虽然我们无法直接抓取搜索结果的位置,但我们当然可以将其记下来以供参考。以下是我们如何更新之前的脚本并使用 BeautifulSoup 提取这些详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 爬行基地 进口 抓取API
bs4 进口 美丽汤
urllib.parse 进口 报价
进口 JSON

# 使用您的 API 令牌初始化 CrawlingAPI
API_TOKEN = 'YOUR_CRAWLBASE_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})

DEF 获取页面html(网址):
响应=crawling_api.get(url)
if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码(“utf-8”)
其他:
打印(f“请求失败,爬行库状态代码 {回复[“标题”]['pc_status']}")
回报 不包含

DEF scrape_yandex_搜索(html_内容):
汤 = BeautifulSoup(html_content, 'html.parser')

# 提取搜索结果详细信息
搜索结果 = []
位置、结果 in 枚举(汤.选择('.serp-item'), 开始=1):
title_element = 结果.select_one('h2.organic__url-文本')
url_element = 结果.select_one('a.organic__url')
描述元素 = 结果.select_one('div.organic__content-wrapper')

搜索结果 = {
'位置': 位置,
'标题': title_element.get_text(条=) if 标题元素 其他 不包含,
'网址': url_元素['href'] if 网址元素 其他 不包含,
'描述': 描述元素.get_text(条=) if 描述元素 其他 不包含,

}
搜索结果.append(搜索结果)

回报 搜索结果

DEF ():
搜索查询= “冬季夹克”
网址= f'https://yandex.com/search/?text={引用(搜索查询)}'
html_content = fetch_page_html(url)

if html_内容:
搜索结果 = scrape_yandex_search(html_content)
打印(json.dumps(搜索结果,ensure_ascii=, 缩进=2))

if __名字__ == “__主要的__”:
主()

fetch_page_html 函数使用 CrawlingAPI 库和指定的 URL 向 Yandex 的搜索结果页面发送 HTTP GET 请求。如果响应状态码为200,表示成功,则解码 UTF-8 响应正文并返回 HTML 内容;否则,它会打印一条错误消息并返回 None。

同时,本 scrape_yandex_search 函数利用 BeautifulSoup 解析 Yandex 搜索结果页面的 HTML 内容。该函数迭代搜索结果,构建提取的信息,并将其附加到 search_results 列表。最后,该函数返回编译后的搜索结果列表。

main 该功能就像一个控制中心,启动获取和组织特定搜索查询的 Yandex 搜索结果的过程。然后,它以易于阅读的 JSON 样式格式显示收集的结果。

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
[
{
“位置”: 1,
“标题”: “2024 年最佳冬季夹克 | Switchback 旅行”,
“网址”: “https://www.switchbacktravel.com/best-winter-jackets”,
“说明”: “Patagonia Tres 3 合 1 派克大衣(冬季夹克)类别:休闲 填充量:4.2 盎司 700 填充力羽绒 重量:2 磅”
},
{
“位置”: 2,
“标题”: “冬衣— купить по низкой цене на Яндекс Маркете”,
“网址”: “https://market.yandex.ru/search?text=winter%20jacket”,
“说明”: “Купитьwinterjacket- 97 предложений - низкие цены, быстрая доставка от 1-2 часов, возможность оплаты в рассрочку...Куртка ASICS Lite ShowWinterJacket . 15 338 ₽。”
},
{
“位置”: 3,
“标题”: “Amazon.com:冬季夹克”,
“网址”: “https://www.amazon.com/Winter-Jackets/s?k=Winter+Jackets”,
“说明”: “CAMEL CROWN 男式山地雪地防水滑雪夹克可拆卸连帽防风抓绒派克大衣雨衣冬季外套。”
},
{
“位置”: 4,
“标题”: “19 件男女最佳冬季夹克(2023 年大规模...”,
“网址”: “https://www.thebrokebackpacker.com/best-winter-jackets/”,
“说明”: “快速回答:这些是 2023 年最佳冬季夹克。2023 年最佳冬季夹克。#1 – 最佳男士整体冬季夹克。”
},
{
“位置”: 5,
“标题”: “29 个最佳豪华冬季夹克品牌(2024 年)”,
“网址”: “https://www.irreverentgent.com/best-luxury-winter-jacket-brands/”,
“说明”: “如果您准备好在寒冷的月份里最终看起来和感觉势不可挡,那么请继续阅读以发现绝对最好的奢侈品和设计师冬季夹克品牌。”
},
{
“位置”: 6,
“标题”: “14 件适合极端寒冷的冬季夹克 - PureWow”,
“网址”: “https://www.purewow.com/fashion/best-winter-jackets-for-extreme-cold”,
“说明”: “在这种场合,您肯定会想穿上一件超保暖外套。这些高科技上衣绝对是应对极寒的最佳冬季夹克......”
},
{
“位置”: 7,
“标题”: “2024 年最佳冬季夹克”,
“网址”: “https://gearjunkie.com/apparel/best-winter-jackets”,
“说明”: “Patagonia Stormshadow 派克大衣(2023 美元)是 2024-899 年冬季的新品,是我们新宠的全能冬季夹克。”
},
{
“位置”: 8,
“标题”: “Зимний пуховик длинныйWINTERJACKET173622027...”,
“网址”: “https://www.WildBerries.ru/catalog/173622027/detail.aspx”,
“说明”: “Похожие. Следующий слайд. Зимний пуховик длинныйWINTERJACKET....холлофайбер. Все характеристики и описание переехали сюда.WINTERJACK ET.Читать ещёПохожие. Следующий слайд. Зимний пуховик длинныйWINTERJACKET. Цвет черный. Похожие. ... холлофайбер. Все характе ристики и описание переехали сюда .WINTERJACKET。Зимний пуховик длинный。240 оценок.СкрытьЦена47614 761₽"
},
{
“位置”: 9,
“标题”: “Мужские зимние куртки — купить в интернет-магазине...”,
“网址”: “https://www.Lamoda.ru/c/3816/clothes-men-winter-jackets/”,
“说明”: “Мужские зимние куртки с бесплатной доставкой в интернет-магазине Ламода, актуальные цены, в наличии большой ассортимент莫德雷伊。”
},
{
“位置”: 10,
“标题”: “经过测试和审查的 27 款 2024 年最佳男士冬季夹克”,
“网址”: “https://www.esquire.com/style/mens-fashion/g2014/best-winter-coats/”,
“说明”: “无论您是在寻找适合天气的派克大衣、温暖的羽绒服还是舒适的飞行员夹克,我们都找到了 27 年最值得购买的 2024 件最佳、最时尚的冬季外套。”
},
{
“位置”: 11,
“标题”: “经过测试和审查的 2024 年最佳男士冬季夹克”,
“网址”: “https://www.travelandleisure.com/style/best-mens-winter-jackets-and-coats”,
“说明”: “我们的专业户外爱好者测试了一系列冬季夹克,以找到市场上最好的夹克。”
},
{
“位置”: 12,
“标题”: “Интернет-магазин 中国制造。Поставщики из Китая”,
“网址”: "https://yabs.yandex.ru/count/WY0ejI_zOoVX2Ldb0PKG09DUSoOQbKgbKga4mOJVzd9dpvPERUREdOVQ-VeThpVSuJu0WmY71aD94b2LKlIGkC8eyXawmKA8-aA24KZOC9gHHEA6ab0D8QKWAWaYew0Hr2AX6K5raL1jhLA9HYmXeTW1KpOjV4b0Zy9MwJTigwHfy0467SSfd681sYaSbGAqqfn7ca-V-7G20Mmvur_ELyQULm-7HlDdzFc4IgNFwTDsubFd3RNjMlfqHczS6hsTzmrrIkqASB0y040anWelv_CD4ysO9GhJbxEpBd1Q3Ri3kgxhDNgLdDqh3XxgOdD5ugemQ4CKcKAdfjMVx2nicLaPdSBMKz1X9fGf85E98ME0qdKOSXD6_7MOxsGGAZNd1HksCDqGJJuK7PMqNLDlkUVL_DACJIxDsDnfAta_F65n_s3wCEv_VTlXz_gsmy_rROT_dy0NvMkPZdu_otJqOvezTv5P_bLIc4-aFB6Y6sbwV03S6-DTdO_2AHhiWHJfetSDabDWz7QfwCl-B8h8e2Vx8KR2iFoOzc03eF1LrVal4bhuYIDQ-4dMQtqRbnoOp6T3JCagakMrX_ZcTO-4aHi5ZWXONpxcIgLIQHMYmiwEqJ7GKvJV3OK8JOf-P6115FmOHOD-1Di4B0LMGBcwoDiu0PU_avPIsIX-yOculirKKE8GdZPMV7mKURvKt9lzxy-YsW_y45FEE6RWxamqY9C9~2?etext=2202.PsLaMsAcnPGXqEYDfwE_3RxouxkWkc56UM4sxhHfKtZicGpncGZuY3d2Y25lc2pi.0b887a5f2d86e1deffcb91bcf2515e203905de3b&from=yandex.com%3Bsearch%26%23x2F%3B%3Bweb%3B%3B0%3B&q=winter+jackets",
“说明”: “Доставка прямо с китайского завода。Большой выбор。Гарантия качества。Заходите!·Различные способы оплаты。Подедержка。 Качественная продукция. Гарантия"
}
]

处理分页

在抓取 Yandex 搜索结果时,浏览多个页面是一个常见的挑战。了解指示页面导航的 HTML 元素的结构至关重要。通常,您需要为每个页面动态制作 URL,并相应地调整页码等参数。通过脚本中的页面实施系统迭代可确保全面的数据提取。为了优化效率并防止 Yandex 服务器过载,请考虑在请求之间引入延迟,并遵守负责任的网络抓取实践。以下是我们如何更新之前的脚本来处理分页:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口

# 使用您的 API 令牌初始化 CrawlingAPI
API_TOKEN = 'YOUR_CRAWLBASE_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})
位置_开始= 1

DEF 获取页面html(网址):
响应=crawling_api.get(url)
if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码(“utf-8”)
其他:
打印(f“请求失败,爬行库状态代码 {回复[“标题”]['pc_status']}")
回报 不包含

DEF scrape_yandex_搜索(html_内容):
全球化 位置开始
汤 = BeautifulSoup(html_content, 'html.parser')

# 提取搜索结果详细信息
搜索结果 = []
位置、结果 in 枚举(汤.选择('.serp-item'), 开始=位置开始):
title_element = 结果.select_one('h2.organic__url-文本')
url_element = 结果.select_one('a.organic__url')
描述元素 = 结果.select_one('div.organic__content-wrapper')

搜索结果 = {
'位置': 位置,
'标题': title_element.get_text(条=) if 标题元素 其他 不包含,
'网址': url_元素['href'] if 网址元素 其他 不包含,
'描述': 描述元素.get_text(条=) if 描述元素 其他 不包含,

}
搜索结果.append(搜索结果)

起始位置 = 位置 + 1

回报 搜索结果

DEF ():
基本网址 = f'https://yandex.com/search/?text=${引用(“冬季夹克”)}&p='
页码 = 0
所有搜索结果 = []

# 将分页深度限制为 6 页
# 您可以根据需要更改限制
页码 <= 5:
网址 = 基本网址 + STR(页码)
html_content = fetch_page_html(url)

if html_内容:
搜索结果 = scrape_yandex_search(html_content)
all_search_results.extend(搜索结果)

页码 += 1
# 引入延迟以尊重网站服务器
时间.睡眠(2)

# 进一步处理 all_search_results

if __名字__ == “__主要的__”:
主()

该脚本使用 while 循环迭代多个页面,获取每个页面的 HTML 内容。为了尊重网站的服务器,请求之间引入了 2 秒的延迟。然后提取搜索结果并将其聚合在 all_search_results 列表。这种系统方法可确保脚本导航各个页面、检索 HTML 内容并累积搜索结果,从而在抓取过程中有效处理分页。

存储抓取的数据

成功从 Yandex 的搜索结果中抓取数据后,下一个关键步骤是存储这些有价值的信息以供将来分析和参考。在本节中,我们将探讨两种常见的数据存储方法:将抓取的数据保存在 CSV 文件中并将其存储在 SQLite 数据库中。这些方法使您可以有效地组织和管理抓取的数据。

将抓取的数据存储在 CSV 文件中

CSV 是一种广泛使用的用于存储表格数据的格式。这是一种简单且人类可读的存储结构化数据的方式,使其成为保存抓取的 Yandex 搜索结果数据的绝佳选择。

我们将扩展之前的网页抓取脚本,添加使用流行的 Python 库 pandas 将抓取的数据保存到 CSV 文件中的步骤。 这是该脚本的更新版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 大熊猫 as pd
进口

# 使用您的 API 令牌初始化 CrawlingAPI
API_TOKEN = 'YOUR_CRAWLBASE_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})
位置_开始= 1

DEF 获取页面html(网址):
# ...(不变)

DEF scrape_yandex_搜索():
# ...(不变)

DEF ():
基本网址 = f'https://yandex.com/search/?text=${引用(“冬季夹克”)}&p='
页码 = 0
所有搜索结果 = []

# 将分页深度限制为 6 页
# 您可以根据需要更改限制
页码 <= 5:
网址 = 基本网址 + STR(页码)
html_content = fetch_page_html(url)

if html_内容:
搜索结果 = scrape_yandex_search(html_content)
all_search_results.extend(搜索结果)

页码 += 1
# 引入延迟以尊重网站服务器
时间.睡眠(2)

# 将抓取的数据保存为 CSV 文件
df = pd.DataFrame(all_search_results)
df.to_csv(“yandex_search_results.csv”, 索引=)

if __名字__ == “__主要的__”:
主()

在这个更新的脚本中,我们引入了 pandas,一个强大的数据操作和分析库。抓取并积累搜索结果后 all_search_results 列表中,我们根据该数据创建一个 pandas DataFrame。 然后,我们使用 to_csv 方法将 DataFrame 保存到当前目录中名为“yandex_search_results.csv”的 CSV 文件。环境 index=False 确保我们不会将 DataFrame 的索引保存为 CSV 文件中的单独列。

yandex_search_results.csv 文件快照:

输出 CSV 文件快照

将抓取的数据存储在 SQLite 数据库中

如果您更喜欢结构化且查询友好的数据存储方法,SQLite 是一种轻量级、无服务器数据库引擎,它可能是一个不错的选择。 您可以创建数据库表来存储抓取的数据,从而实现高效的数据检索和操作。 以下是修改脚本以将数据存储在 SQLite 数据库中的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 sqlite3
进口

# 使用您的 API 令牌初始化 CrawlingAPI
API_TOKEN = 'YOUR_CRAWLBASE_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})
位置_开始= 1

DEF 获取页面html(网址):
# ...(不变)

DEF scrape_yandex_搜索():
# ...(不变)

DEF 初始化数据库():
# 创建或连接到 SQLite 数据库
conn = sqlite3.connect('搜索结果.db')
光标 = conn.cursor()

# 创建一个表来存储搜索结果
游标.执行('''
如果不存在则创建表 search_results (
标题文本,
网址文本,
描述文本,
位置 整数
)
''')

# 提交更改并关闭数据库连接
conn.commit()
conn.close()

DEF 插入搜索结果(结果列表):
# 创建或连接到 SQLite 数据库
conn = sqlite3.connect('搜索结果.db')
光标 = conn.cursor()

# 根据数据创建元组列表
data_tuples = [(结果['标题'], 结果['网址'], 结果['描述'], 结果['位置']) 导致 in 结果列表]

# 将数据插入到search_results表中
光标.executemany('''
INSERT INTO search_results(标题、网址、描述、位置)
值 (?, ?, ?, ?)
''',数据元组)

conn.commit()
conn.close()

DEF ():
基本网址 = f'https://yandex.com/search/?text=${引用(“冬季夹克”)}&p='
页码 = 0
所有搜索结果 = []

# 初始化数据库
初始化数据库()

# 将分页深度限制为 6 页
# 您可以根据需要更改限制
页码 <= 5:
网址 = 基本网址 + STR(页码)
html_content = fetch_page_html(url)

if html_内容:
搜索结果 = scrape_yandex_search(html_content)
all_search_results.extend(搜索结果)

页码 += 1
# 引入延迟以尊重网站服务器
时间.睡眠(2)

# 将抓取的数据插入到SQLite数据库中
插入搜索结果(所有搜索结果)

if __名字__ == “__主要的__”:
主()

功能, initialize_database()insert_search_results(result_list),处理管理 SQLite 数据库。 这 initialize_database() 函数负责创建或连接到名为的数据库文件 search_results.db 定义一个表结构来存储搜索结果。 这 insert_search_results(result_list) 函数将抓取的搜索结果插入到此数据库表名称中,如下所示 search_results.

search_results 表快照:

搜索结果表快照

总结

本指南提供了使用 Python 和 Crawlbase 抓取 API 抓取 Yandex 搜索结果的必要见解。当您继续您的网络抓取之旅时,请记住这些技能的多功能性不仅限于 Yandex。探索我们针对以下平台的附加指南 谷歌,拓宽您的搜索引擎抓取专业知识。

以下是您可能需要查看的其他一些 Web 抓取 Python 指南:

📜 如何抓取 Expedia

📜 如何抓取 Yelp

📜 如何抓取 Producthunt

📜 如何从 DeviantArt 中抓取图像

我们知道网络抓取可能会带来挑战,因此让您感受到支持非常重要。 因此,如果您需要进一步的指导或遇到任何障碍,请随时与我们联系。 我们的 敬业的团队 致力于在整个网络抓取工作中为您提供帮助。

常见问题解答

问:Yandex 是什么?

Yandex 是一家领先的搜索引擎,被称为“俄罗斯的谷歌”。它不仅仅是一个搜索引擎;它是一家提供各种数字服务的科技公司,包括但不限于搜索功能、地图、电子邮件服务和云存储。 Yandex 起源于俄罗斯,现已将服务扩展到周边国家,并已成为科技行业的重要参与者。

问:为什么有人想要抓取 Yandex 搜索结果?

有人考虑抓取 Yandex 搜索结果的原因可能有多种。研究人员可能想要分析搜索模式,企业可能想要收集市场洞察,开发人员可能想要将搜索结果集成到他们的应用程序中。通过抓取搜索结果,人们可以了解用户行为、跟踪趋势或创建依赖于实时搜索数据的工具。

网络抓取的合法性取决于多种因素,包括网站的服务条款。与许多其他搜索引擎一样,Yandex 也有适当的指南和服务条款。在抓取之前查看并理解这些术语至关重要。始终确保抓取活动尊重 Yandex robots.txt 文件,不会使服务器超载,也不违反任何版权或隐私法。如有疑问,建议寻求法律顾问或使用其他方法来获取所需数据。

问:如何防止我的 IP 在抓取时被屏蔽?

在抓取网站时,阻止您的 IP 是一个常见的挑战。 Crawlbase Crawling API 等工具可以方便地缓解这种风险。该API提供IP轮换,在多个IP地址之间自动切换。此功能可确保您在短时间内仅从单个 IP 发送少量请求,从而减少触发 IP 封禁等安全措施的机会。此外,必须考虑请求之间的延迟、使用用户代理并遵守网站设置的任何速率限制规则,以保持平稳的抓取过程