一个简单而异步的剪贴库
fodio的Python项目详细描述
什么是fodio?
Fodio是一个网页抓取工具,用于轻松浏览网站和收集数据一些钥匙 fodio的概念是建立在简单性和异步性之上的(不,我不认为这是一个真正的词)。灵感来自 已经不活跃的Demiurge图书馆,福迪奥是来拯救这一天的!
为什么我不使用scrapy?
好问题有一些关键的区别也很重要。
- scrapy使用c扩展,这取决于环境,可能会很痛苦!
- scrapy不是异步的!
- 我想,这更简单。
另外,如果你在linux上,你可以使用uvloop,这将有助于加快速度
安装
要使用pypi安装,只需使用pip install fodio
若要手动安装,请下载并解压缩或克隆此存储库。然后,在当地的根上 存储库,执行python setup.py install
我不擅长这部纪录片,所以让我们马上开始吧。
快速启动
太开始刮,检查元素会是你的朋友。您将在元素中复制css选择器 你希望收获。在本例中,我们将浏览一个github示例,您也可以在演示文件中找到它, 在Fodio github页面上
首先,我们需要做一个项目。然后“项目”将代表页面的一部分。
这也很好,注意,这个例子中没有items作为itemattrs,但是您可以这样做。我真的建议你看看 在demos文件中,因为其中包含了很多关于该做什么的好例子。
classGithubPage(Item):...classMeta:...
注意“meta”类。这也用于保存选择器和根URL信息。在这里,我们想 github用户的真实姓名+描述首先,使用“.h-card”选择器缩小配置文件卡的范围那么, 我们将提供根url“https://github.com”
classGithubPage(Item):...classMeta:selector=".h-card"root_url="https://github.com"
没那么糟吧?现在我们有了配置文件卡,我们需要设置一些itemAttributes来提取信息。 我们将使用textatt对象从实名节点提取文本,另一个textatt用于描述
classGithubPage(Item):name=TextAttr(".p-name")desc=TextAttr(".p-note > div:nth-child(1)",raise_not_found=False)classMeta:selector=".h-card"root_url="https://github.com"
注意
注意raise_not_foundkwarg。一些github配置文件没有描述,我们也不希望它太高 如果它们不正确,则对于实名,如果它们有实名,则元素将存在。 不,所以我们得手动检查。
现在时间也到了!为此,我们将创建一个名为runner的异步函数。GithubPage有一个名为 搜索将添加路径的根URL,并获取它。所以让我们这么做吧
accounts=['Zwork101','bukson','torvalds','User1m','random-robbie']asyncdefrunner():result=awaitGithubPage.search(account)print("{account_name}'s real name is {real_name}".format(account_name=account,real_name=result['name']ifresult['name']else"not known"))print('{description}\n'.format(description=('"'+result['desc']+'"')ifresult['desc']else"No Description"))
我们完了添加Asyncio后,也运行它,这是我们的最终产品:
importasynciofromfodioimportItem,TextAttrclassGithubPage(Item):name=TextAttr(".p-name")desc=TextAttr(".p-note > div:nth-child(1)",raise_not_found=False)classMeta:selector=".h-card"root_url="https://github.com"accounts=['Zwork101','bukson','torvalds','User1m','random-robbie']asyncdefrunner():result=awaitGithubPage.search(account)print("{account_name}'s real name is {real_name}".format(account_name=account,real_name=result['name']ifresult['name']else"not known"))print('{description}\n'.format(description=('"'+result['desc']+'"')ifresult['desc']else"No Description"))loop=asyncio.get_event_loop()loop.run_until_complete(runner())
现在还没那么糟吧有关更多示例,请参见demo文件夹。否则,刮吧
wait,但为什么它被称为“fodio”
显然,开发人员喜欢用拉丁语或其他没人用的语言命名他们的项目Fodio(至少 这就是一些网站所说的)可以是“delve”的意思,对所有非英语专业的学生/非魔术的学生来说,delve是一个英语单词:the 聚集玩家。探究意味着研究和挖掘,这个图书馆做的两件事!