谨慎使用!从入门到精通,一文带你学会Python面向监狱爬虫

434 篇文章 10 订阅
56 篇文章 4 订阅

本教程将是一个自始至终的指南,让你可以尽可能简单的使用 Python学习爬虫。
[img]

网络爬虫简单来说,就是从网络中批量获取自己想要的数据。

网上爬取数据有两种方法可以实现:

  • 使用官方 API
  • 网络抓取

API (应用程序接口)是为了以标准的方式在不同的系统之间交换数据。但是,大多数时候,网站所有者并不提供任何 API。在这种情况下,我们只能使用 web 抓取提取数据了。

基本上,每个 web 页面都以 HTML 格式从服务器返回,这意味着我们的实际数据被很好地包装在 HTML 元素中。这使得检索特定数据的整个过程非常简单和直接。

本教程将是一个自始至终的指南,让你可以尽可能简单的使用 Python学习爬虫。首先,我将向你介绍一些基本的示例,让你熟悉 web 抓取。稍后,我们将使用这些知识从 Livescore.cz 中提取足球比赛的数据。

开始

为了让我们开始,你需要启动一个新的 Python3 项目,并安装 Scrapy (一个用于 Python 的 web 爬虫库)。我在本教程中使用了 pipenv,但是你也可以使用 pip 和 venv,或 conda。

复制

pipenv install scrapy # Pipenv 安装 scrap 
1.

现在,你已经有了 Scrapy,但是你仍然需要创建一个新的 web 抓取项目,为此 Scrapy 提供了一个命令行,可以为我们完成这项工作。

现在,让我们使用 scrapy clii 创建一个名为 web _ scraper 的新项目。

如果你像我一样使用 pipenv,请使用:

复制

pipenv run scrapy startproject web_scraper 
1.

或者在你自己的虚拟环境中,使用:

复制

scrapy startproject web_scraper 
1.

这将在工作目录中创建一个基本项目,其结构如下:

[img]

01. 使用 XPath

我们将从一个非常简单的例子开始我们的网络抓取教程。首先,我们将在 HTML 中定位 Live Code Stream 网站的标志。正如我们所知,它只是一个文本,而不是一个图像,所以我们将简单地提取这个文本。

代码

为了开始,我们需要为这个项目创建一个新的爬取器。我们可以通过创建一个新文件或使用 CLI 来实现这一点。

因为我们已经知道我们需要的代码,所以我们将在这个路径 /web_scraper/spiders/live _ code _ stream. py 上创建一个新的 Python 文件

下面是这个文件中的代码。
[img]

代码解释

  • 首先,我们导入了 Scrapy 库,因为我们需要它的功能来创建一个Python web spider。这个爬虫随后将用于抓取指定的网站和提取有用的信息。
  • 我们创建了一个类,并将其命名为LiveCodeStreamSpider。基本上,它继承了 scrapy。这就是为什么我们把它作为一个参数来传递。
  • 现在,重要的一步是使用一个名为 name 的变量为你的 spider 定义一个唯一的名称。请记住,不允许使用现有 spider 的名称。同样,不能使用此名称创建新的爬行器。它必须在整个项目中是独一无二的。
  • 之后,我们使用 start_urls list 传递网站 URL 。
  • parse() 的方法,该方法将在 HTML 代码中定位标记并提取其文本。在 Scrapy,有两种方法可以在源代码中找到 HTML 元素。这些都在下面提到:

​ CSS 和 XPath

你甚至可以使用一些外部库,比如 BeautifulSoup 和 lxml。但是,对于这个例子,我们使用了 XPath。

一个快速确定任何 HTML 元素的 XPath 的方法是在 Chrome Devtools 中打开它。现在,只需右键单击该元素的 HTML 代码,将鼠标光标悬停在刚刚出现的弹出菜单中的“复制”上。最后,单击“ Copy XPath”菜单项。

请看下面的截图,以便更好地理解它。

[img]

顺便说一下,我在元素的实际 XPath 之后使用了/text () ,只从该元素中检索文本,而不是从完整的元素代码中检索。

注意:不可对上面提到的变量、列表或函数使用任何其他名称。这些名称是在 Scrapy 图书馆预先定义的。因此,你必须实事求是地使用它们。否则,程序将无法正常工作。

运行爬虫

因为我们已经在命令提示符下的 web_scraper 文件夹中了。让我们执行 spider 并使用下面的代码在新文件 lcs.json 中填充结果。我们得到的结果将使用 JSON 格式进行良好的结构化。

复制

pipenv run scrapy crawl lcs -o lcs.json scrapy crawl lcs -o lcs.json 
1.

**结果

**

当执行上面的代码时,我们会在项目文件夹中看到一个新的文件 lcs.json。

下面是这个文件的内容。

复制

[ {"logo": "Live Code Stream"} ] 
1.

02. 使用 CSS

我们大多数人都喜欢体育运动,比如足球。

世界各地经常组织足球比赛。有几个网站在比赛进行时提供比赛结果的实时反馈。但是,大多数这些网站并没有提供任何官方的 API。

反过来,它为我们创造了一个机会,使用我们的网络抓取技能和提取有意义的信息,直接抓取他们的网站。

在他们的主页上,他们很好地展示了今天(你访问网站的日期)将要进行的比赛和比赛。

我们可以检索如下信息

  • 比赛名称
  • 比赛时间
  • A队队名
  • A队进球数
  • B队队名
  • B队进球数
  • etc. 等等

在我们的代码示例中,我们将提取今天有匹配的比赛名称。

代码

让我们在项目中创建一个新的 spider 来检索比赛名称,我将项目命名为livescore_t.py

下面是你在 livescore _ t.py 中需要输入的代码:

[img]

代码解释

  • 像往常一样,导入 Scrapy
  • 创建一个类,该类继承 scrapy.Spider
  • 给我们的爬虫取一个独一无二的名字 LiveScoreT
  • 提供 livescore.cz 的URL

最后,用 parse() 函数遍历所有匹配的包含竞赛名称的元素,并使用 yield 将其连接在一起。最后,我们会收到今天有比赛的所有比赛名称。需要注意的一点是,这次我使用了 CSS 而不是XPath。

运行

是时候看看我们的爬虫是如何行动的了。运行下面的命令让 spider 到达 Livescore.cz 网站的主页。然后,web 抓取结果将被添加到一个名为 ls _ t.json 的新文件中。

复制

pipenv run scrapy crawl LiveScoreT -o ls_t.json 
1.

结果

这是我们的网络爬虫在2020年11月18日从 Livescore.cz 中提取的内容。记住,输出可能每天都在变化。

img

04. 总结

数据分析师经常使用网络抓取,因为它可以帮助他们收集数据来预测未来。类似地,企业使用它从网页中提取电子邮件,因为这是一种有效的方式产生领导。我们甚至可以用它来监控产品的价格。

换句话说,web 抓取有许多用例,Python完全有能力做到这一点。

那么,你还在等什么呢? 现在就试着抓取你最喜欢的网站吧。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

点此免费领取:CSDN大礼包:《python学习路线&全套学习资料》免费分享

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

六、Python练习题

检查学习结果。
在这里插入图片描述

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存下方图片微信扫描CSDN官方认证二维码免费领取【保证100%免费】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值