如何用Python和Scrapy将Web转化为数据及对运营的有什么帮助?[图]

一、如何用Python和Scrapy将Web转化为数据
从一开始,网站就被用来分享信息。无论是维基百科的文章,YouTube频道,Instagram账号,还是Twitter账号。它们都充满了有趣的数据,每个人只要能访问互联网和web浏览器就可以获得这些数据。
但是,如果我们想通过编程获得任何特定的数据呢?
有两种方法可以做到:-
使用官方API
网页抓取
引入了API(应用程序编程接口)的概念,以标准的方式在不同的系统之间交换数据。但是,大多数时候,网站所有者不提供任何API。在这种情况下,我们只剩下使用web抓取来提取数据的可能性。
基本上,每个web页面都以HTML格式从服务器返回。这意味着我们实际的数据被很好地打包在HTML元素中。它使得检索特定数据的整个过程非常简单和直接。
本教程将是您学习使用Python编程语言进行web抓取的最终指南。首先,我将向您介绍一些基本示例,以使您熟悉web抓取。稍后,我们将使用这些知识从Livescore中提取。
废话不多说,让我们跟着我走吧。

如何用Python和Scrapy将Web转化为数据及对运营的有什么帮助?[图]

开始
为了让我们开始,你需要启动一个新的Python3项目,并安装Scrapy(一个用于Python的web抓取和web爬行库)。我在本教程中使用pipenv,但是你可以使用pip和venv,或者conda。
pipenvinstallscrapy
在这一点上,您有了Scrapy,但是您仍然需要创建一个新的web抓取项目,并且Scrapy为我们提供了一个命令行来完成这项工作。
现在让我们使用scrapycli创建一个名为web_scraper的新项目。
如果你像我一样使用pipenv,请使用:
pipenvrunscrapystartprojectweb_scraper.
否则,从您的虚拟环境中使用
scrapystartprojectweb_scraper.
这将在当前目录中创建一个基本项目,结构如下:
scrapy.cfgweb_scraper/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
使用XPath查询构建我们的第一个爬行器
我们将用一个非常简单的例子来开始我们的网页抓取教程。首先,我们将在HTML中找到实时代码流网站的徽标。我们知道它只是一段文字而不是图像,所以我们将简单地提取这段文字。
的代码
首先,我们需要为这个项目创建一个新的爬行器。我们可以通过创建一个新文件或使用CLI来实现这一点。
importscrapy
classLiveCodeStreamSpider(scrapy.Spider):
name="lcs"
start_urls=["https://www.54s.cn/"]
defparse(self,response):
yield{
'logo':response.xpath("/html/body/header/nav/a[1]/text()").get()
}
代码的解释:
首先,我们导入了Scrapy库。这是因为我们需要它的功能来创建Pythonwebspider。然后这个爬行器将被用来抓取指定的网站并从中提取有用的信息。
我们创建了一个类并将其命名为LiveCodeStreamSpider。基本上,它继承了scrapy。这就是为什么我们将它作为参数传递。
现在,一个重要的步骤是使用名为name的变量为爬行器定义唯一的名称。请记住,不允许使用现有爬行器的名称。同样,也不能使用此名称创建新的蜘蛛。在整个项目中它必须是唯一的。
在此之后,我们使用start_urls列表传递网站URL。
最后,创建一个名为parse()的方法,它将在HTML代码中找到徽标并提取其文本。在Scrapy中,有两种方法可以在源代码中找到HTML元素。这些都在下面提到。
CSS
XPath

您甚至可以使用一些外部库,如BeautifulSoup和lxml。但是,在本例中,我们使用了XPath。确定任何HTML元素的XPath的一种快速方法是在ChromeDevTools中打开它。现在,读书笔记(https://www.yuananren.com)只需右键单击该元素的HTML代码,将鼠标光标停留在刚刚出现的弹出菜单中的“Copy”上。最后,单击“复制XPath”菜单项。请看下面的截图,以便更好地理解它。


顺便说一下,我在元素的实际XPath之后使用了/text(),以只检索该元素的文本,而不是整个元素代码。
注意:上面提到的变量、列表或函数不允许使用任何其他名称。这些名称是在Scrapy库中预定义的。所以,你必须如实使用它们。否则,程序将不能按预期工作。
蜘蛛运行:
因为我们已经在命令提示符中的web_scraper文件夹中了。让我们执行爬行器并将结果填充到一个新文件lcs中。json使用下面的代码。是的,我们得到的结果使用JSON格式将是结构良好的。
pipenvrunscrapycrawllcs-olcs.json
scrapycrawllcs-olcs.json
结果:
当执行上述代码时,我们将看到一个新的lcs文件。json在我们的项目文件夹中。
以下是该文件的内容。
[{"logo":"LiveCodeStream"}]
另一个使用CSS查询选择器的爬行器
我们大多数人都喜欢运动,谈到足球,它是我个人最喜欢的。
足球锦标赛在世界各地经常举办。有几个网站在比赛进行时提供比赛结果的实况转播。但是,这些网站大多不提供任何官方API。
反过来,这也为我们提供了一个机会来使用我们的网络抓取技能,并通过直接抓取他们的网站来提取有意义的信息。
例如,让我们来看看Livescore网站。
在他们的主页上,他们漂亮地展示了今天(你访问网站的日期)将要进行的比赛和比赛。
我们可以检索这样的信息:
比赛的名字
比赛时间
球队名称(如国家、足球俱乐部等)
团队1目标
团队2目标
等。
在我们的代码示例中,我们将提取今天已经匹配的比赛名称。
让我们在项目中创建一个新的爬行器来检索比赛名称。我将把这个文件命名为livescore_t.py
下面是需要在/web_scraper/web_scraper/spider/livescore_t.py中输入的代码
importscrapy
classLiveScoreT(scrapy.Spider):
name="LiveScoreT"
start_urls=[
"https://livescore.cz/"
]
defparse(self,response):
forlsinresponse.css('#soccer_livescore.tournament'):
yield{
'tournament':ls.css('.nationa::text').get()
}
像往常一样,进口Scrapy。
创建一个继承scrapy.Spider的属性和功能的类。
给我们的蜘蛛一个唯一的名字。在这里,我使用利弗斯库雷,因为我们将只提取比赛的名字。
下一步是提供Livescore的URL。
最后,parse()函数遍历所有匹配的包含竞赛名称的元素,并使用yield将其连接在一起。最后,我们会收到今天有比赛的所有比赛名称。
需要注意的一点是,这次我使用了CSS选择器而不是XPath。
运行新创建的爬行器:
是时候看看我们的蜘蛛行动了。运行下面的命令让爬行器在Livescore的主页上爬行。cz网站。然后,web抓取结果将被添加到名为ls_t的新文件中。json格式的json。
pipenvrunscrapycrawlLiveScoreT-ols_t.json
现在你知道该怎么做了。
这是我们的蜘蛛在2020年11月18日从Livescore网站上提取的。记住,输出可能每天都在变化。
[
{"tournament":"International-WorldCupQualificationCONMEBOL"},
{"tournament":"Brazil-SerieA"},
{"tournament":"International-UEFANationsLeagueAGrp.3"},
{"tournament":"International-UEFANationsLeagueAGrp.4"},
{"tournament":"International-UEFANationsLeagueCGrp.1"},
{"tournament":"International-UEFANationsLeagueDGrp.1"},
{"tournament":"International-UEFANationsLeagueDGrp.2"},
{"tournament":"..."}
]
一个更高级的用例
在本节中,不只是检索比赛名称。我们将走下一英里,得到比赛和他们的比赛的完整细节。
在/web_scraper/web_scraper/spiders/中创建一个新文件,并将其命名为livescore.py。现在,在其中输入以下代码。
classLiveScore(scrapy.Spider):
name="LiveScore"
"https://www.livescore.cz/yesterday.php"
table_tr=response.css('tr')
tournaments=[]
fortrintable_tr:
iftr.css('.tournament'):
tournaments.append({
'name':tr.css('.nationa::text').get(),
'matches':[]
})
eliftr.css('.match'):
team_score=tr.css('.col-scorestrong::text').get()
ifteam_scoreisnotNone:
team_1_score=team_score.split(':')[0]
team_2_score=team_score.split(':')[1]
else:
team_1_score=None
team_2_score=None
tournaments[-1]['matches'].append({
'time':tr.css('.match.col-timetime::attr(datetime)').get(),
'state':tr.css('.match.col-statespan::text').get(),
'team_1_name':tr.css('.col-homea::text').get(),
'team_1_score':team_1_score,
'team_2_name':tr.css('.col-guesta::text').get(),
'team_2_score':team_2_score
})
fortintournaments:
'tournament':t
该文件的代码结构与前面的示例相同。在这里,我们只是用新的功能更新了parse()方法。
基本上,我们从页面中提取了所有HTML<tr></tr>元素。然后,我们对它们进行循环,以确定它是锦标赛还是比赛。如果它是一个锦标赛,我们提取它的名字。在比赛的情况下,我们提取它的“时间”、“状态”和“两队的名称和分数”。
运行示例:
在控制台中键入以下命令并执行它。
pipenvrunscrapycrawlLiveScore-ols.json
以下是它检索到的内容的样本:
[{
"tournament":{
"name":"International-WorldCupQualificationCONMEBOL",
"matches":[{
"time":"2020-11-18T00:00:00+01:00",
"state":null,
"team_1_name":"Uruguay",
"team_1_score":"0",
"team_2_name":"Brazil",
"team_2_score":"2"
},{
"team_1_name":"Paraguay",
"team_1_score":"2",
"team_2_name":"Bolivia",
"time":"2020-11-18T01:30:00+01:00",
"team_1_name":"Peru",
"team_2_name":"Argentina",
}]
}
}]
现在有了这些数据,我们可以做任何我们想做的事情,比如用它训练我们自己的神经网络来预测未来的游戏。
结论
数据分析师经常使用web抓取,因为它可以帮助他们收集数据来预测未来。类似地,企业使用它从网页中提取电子邮件,因为这是一种有效的引导方式。我们甚至可以用它来监控产品的价格。
换句话说,web抓取有很多用例,而Python完全有能力做到这一点。
那么,你还在等什么?现在就尝试抓取你最喜欢的网站。
二、学Python有助于运营的工作吗?
在去年年底开始学习Python之后,我发现自己越来越多地将我所学的东西付诸实践,作为一名SEO专业人士,我的日常任务也在不断学习。
这包括相当简单的任务,例如比较字数或状态码随时间的变化,以及分析包括内部链接和日志文件分析在内的工作。
此外,Python还非常有用:
用于处理大型数据集。对于通常会使Excel崩溃并需要复杂分析以提取任何有意义的见解的文件。
学Python有助于SEO的工作吗?Python如何有助于SEO?
Python通过多种方式增强了SEO专业人员的能力,因为它能够自动执行通常需要大量时间才能完成的重复、低级任务。
这意味着我们有更多的时间(和精力)用于重要的战略工作和无法自动化的优化工作。
它还使我们能够更有效地处理大量数据,以便做出更多数据驱动的决策,从而为我们的工作和客户的工作提供有价值的回报。
事实上,麦肯锡全球研究所(McKinseyGlobalInstitute)的一项研究发现,以数据为驱动的组织获得客户的可能性是其他组织的23倍,而留住这些客户的可能性是6倍。
它对备份你的任何想法或策略也很有帮助,因为你可以用你拥有的数据来量化这些想法或策略,并在此基础上做出决策,同时在努力实现事情时也有更大的杠杆作用。
学Python有助于SEO的工作吗?
将Python添加到工作流中的最佳方法是:
想一想什么是可以自动化的,尤其是在执行乏味的任务时。
确定您正在执行或已完成的分析工作中的任何差距。
我发现开始学习的另一个有用的方法是使用您已经访问过的数据,并使用Python从中提取有价值的见解。
这就是我如何学会了我将在本文中分享的大部分东西。
学习Python并不是成为一个好的SEO专家的必要条件,但是如果你有兴趣了解更多关于Python如何帮助你做好准备的话。
学Python有助于SEO的工作吗?
开始需要什么?
来自网站的一些数据(例如,对网站的爬网、谷歌分析或谷歌搜索控制台数据)。
一个运行代码的IDE(集成开发环境),对于入门,我推荐GoogleColab或JupyterNotebook。
开放的思想。这也许是最重要的一点,不要害怕打破某些东西或犯错误,找到问题的原因和解决问题的方法是我们作为SEO专业人士所做的工作的一个重要部分,因此将同样的心态应用于学习Python有助于减轻任何压力。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值