宜家产品刮板
hemnes的Python项目详细描述
血红素
目录
- 关于项目
- 入门
- 运行时
- 安装
- 基本用法
- 产品对象详细信息
- 高级用法
- 指定chromedriver二进制文件的路径rel="nofollow">指定chromedriver的路径
- 必选关键字&;严格搜索
- 日志记录
- 检索特定数量的结果
- 加速
- 使用标签字段
- 将结果写入json/csv
- 测试
- 下一步是什么
- 发布历史
- 许可证
关于项目
hemnes是一个pip包,用于从宜家(ikea)中删除产品数据,这是因为重写刮板是浪费时间。Hemnes让您能够在30秒内查询宜家的产品目录(我没有计时)。
以下产品数据由Hemnes收集:
名称(str)
-产品名称id(str)
-唯一的产品id价格(浮动)
-产品价格url(str)
-产品页面的url评级(浮动)
-平均客户评级img_url(list[str])
-产品图像的url颜色(list[str])
-产品颜色(请参见hemnes/helpers/find嫒element
中的颜色
以获取正在搜索的颜色的完整列表)
Hemnes配备了一些有用的功能,用于执行以下操作:
- 查找描述中包含特定关键字的产品
- 日志记录
- 将结果写入json
使用
构建为什么是selenium,或者为什么不是python请求
如果你快速浏览一下关于刮宜家的栈溢出帖子——或者你正在考虑自己写一个刮器——你可能会遇到一些人使用selenium webdriver来处理不需要它的页面。不过,selenium比python请求重,webdriver可以加载角度生成的内容,而请求不能
宜家家居租赁网站使用角度搜索结果。这与以前的搜索有所不同,后者可以通过python请求访问。新的搜索提供了更准确的结果和更少的垃圾。从经验上讲,旧的搜索非常糟糕,它为任何一个我无法连接回原始搜索的给定查询提供了大量垃圾结果(例如,旧的搜索为"table"返回58页结果,其中包括placemats和狗玩具;新的搜索返回15,所有结果实际上都是表)
入门
hemnes的安装和使用非常简单。它的功能与您期望的web抓取包的功能完全相同-输入查询并返回结果。
运行时
- 巨蟒3+
安装
hemnes使用标准pip安装。要从pypi安装,请运行
pip3 install hemnes
或者,您可以克隆repo,然后在目录中运行pip install
# clone the repository git clone https://github.com/sayeefrmoyen/hemnes.git cd hemnes pip3 install . # install the current directory as a package
铬驱动器
hemnes使用chromedriver加载网页。如果chromedriver已经安装并且位于系统路径上,则可以跳过本节的其余部分。
要使用chromedriver,您需要安装google chrome。如果您已经安装了google chrome我相信您应该能够运行hemnes而不会出现问题。对于完整的披露,我不熟悉google chrome或chrome驱动程序代码,也不知道它们是如何交互的,但是在运行hemnes时,如果没有显式安装chrome driver二进制文件,我就不会遇到任何问题。
尽管如此,selenium的webdriver文档建议您同时安装google chrome和chromedriver版本。如果您发现在安装google chrome之后您仍然收到关于chromedriver的错误,那么您应该继续安装chromedriver
此时,您应该准备好开始使用hemnes。
基本用法
最简单的说,hemnes只需要一个查询。使用process_query
函数检索给定查询的产品数据。处理查询
返回包含与给定查询匹配的产品的列表[产品]。
importhemnes# query ikea's product catalog for products tagged as chairs# chair_results is now a list[Product] containing all of the products# in ikea's catalog of chairsresults=hemnes.process_query('chair')
产品对象详细信息
hemnes以列表[产品]
的形式返回查询结果。产品
是包含以下字段的帮助程序类:
名称(str)
-产品名称id(str)
-唯一的产品id价格(浮动)
-产品价格url(str)
-产品页面的url评级(浮动)
-平均客户评级img_url(list[str])
-产品图像的url颜色(列表[str])
-产品颜色标记(str)
-灵活使用字段
其中大多数都是非常不言而喻的;我只想深入讨论标记
字段。标记
属性是为一次调用process_query
返回的所有产品指定的,并且包含在其中以供灵活使用。为什么这样一个字段会有用的一个例子是,如果您将此数据存储在数据库中,并且需要一个主键来搜索-您可以使用标记
来指示产品类型(椅子、桌子等)。默认情况下,标记
设置为无
。有关使用标记的详细信息,请参见设置其他选项
还有一点需要注意的是,除了url
之外,所有这些字段都有可能找不到,并随后被设置为none
。但是,在测试和检查宜家的产品网页,不太可能找不到这些属性。此规则的一个例外是评分
字段,在产品没有评论时,该字段将设置为无
。
高级用法
hemnes需要传递一个选项
对象来指定一些附加设置。options
是一个帮助类,用于组织将大量参数传递给流程查询。如果您不提供
选项
对象来处理查询
,则会选择许多默认设置。本节的其余部分将讨论如何修改这些设置。
指定chromedriver二进制文件的路径
如果您已经安装了chromedriver二进制文件和google chrome浏览器,但在运行hemnes时仍然遇到错误,则可能需要将二进制文件的路径显式传递给selenium webdriver。为此,请使用选项
类
importhemnes...# explicitly passing the chromedriver binary to webdriveroptions=hemnes.Options()options.cdriver_path='path/to/chromedriver/binary'results=hemnes.process_query('your query',options)
必需的关键字&;严格搜索
有时,有必要在通常的高级查询术语之外改进查询。hemnes允许您指定要在产品页面上搜索的多个关键字
,并且只返回包含全部或部分这些词的产品。选项
接受将关键字
字段设置为包含所需关键字的集合[str]
。
您还可以通过将options
strict
字段设置为bool
来指定是否需要所有关键字。默认情况下,strict
设置为false
,这意味着如果传递了关键字
,则将返回任何具有至少一个关键字的产品。要要求为返回的产品找到所有关键字
,请将strict
设置为true
importhemnes...# setting required keywordsoptions=hemnes.Options()options.keywords={'large','comfortable'}# enable strict-searching, requiring all products to contain all of the# keywords in order to be returned. If disabled or untouched, any# product with at least one of the keywords will be returnedoptions.strict=Trueresults=hemnes.process_query('chair',options)
对于那些对搜索关键字的位置感到好奇的人,hemnes在每个产品页面的3个不同的产品描述部分中搜索
关键字
启用日志记录
返回大量结果的查询的某些作业可能需要一段时间才能完成。即使对于较短的作业,查看hemnes在处理查询时的位置也会有帮助。要启用日志记录过程结果,请将选项中的
log
字段设置为true
。默认情况下,log
设置为false
以避免压倒性的毫无戒心的用户。
importhemnes...# enabling logsoptions=hemnes.Options()options.log=True# enable logging - this will log to both stdout and to a# logfile found at 'hemnes-logs/hemnes-MONTH-DAY-HOUR-MINUTE-SECOND.logresults=hemnes.process_query('chair',options)
默认情况下,日志记录将同时记录到stdout和一个类似于hemnes logs/hemnes-04-23-02:41:16.log的日志文件-该文件名为
hemnes month day hour minute second.log
。如果没有hemnes日志
目录,将在尝试向其写入文件之前创建该目录。
Hemnes会记录如下内容:
- 找到有效产品时
- 当发现无效产品时(例如关键字要求失败)
- 要返回的有效产品总数
- 任何潜在错误
检索特定数量的结果
如果给定查询只需要特定数量的结果,请设置 hemnes将返回请求的产品数量,如果查询没有返回足够的结果,则返回的产品数量将更少。 加载角度页可能很慢,主要是因为从这些页检索完整的dom需要时间。改变dom的睡眠时间以使其完全加载可以显著提高hemnes的速度。 默认情况下,hemnes要求在每个页面请求后有3秒的睡眠时间,以确保dom已完全加载。对于下载速度快的用户,这可能比所需的时间长。为了减少网络请求后的睡眠时间,请将 通过在 通过使用 注意:任何 测试分为孤立的测试和集成的测试。 注意: 要运行测试,请克隆存储库并使用pytest运行
我对现在的情况很满意-如果有人要求更多的功能,我会查看它们,否则我会按原样维护hemnes。 根据麻省理工学院的许可证发行。有关详细信息,请参见许可证。选项的
num_results
字段。
importhemnes...# setting a target number of resultsoptions=hemnes.Options()options.num_results=10# hemnes will only return up to 10 productsresults=hemnes.process_query('chair',options)
加速
选项的
睡眠时间
属性设置为更多适合您的互联网连接。
importhemnes...# setting required keywordsoptions=hemnes.Options()options.sleep_time=1# hemnes will now wait only 1 second for DOM to be loaded for# newly retrieved pages. Users should set sleep_time to an# appropriate amount of time based on their internet connection.# The default setting of 3-seconds should be fine for almost all usersresults=hemnes.process_query('chair',options)
使用产品的标记字段
选项
中设置标签
字段,可以为所有返回的产品
设置标签
字段。标记的类型应为
str
importhemnes...# setting the tag attributeoptions=hemnes.Options()options.tag='chair'# all of the products returned in results will have their tag field# set to the string "chair"results=hemnes.process_query('chair',options)
将结果写入json或csv
选项设置文件的适当路径,可以将刮取的结果存储到json或csv。
如果路径已存在,hemnes将删除现有文件。
none
字段都将在json中写为null
或在csv中保留为空
pip3 install hemnes
0
测试
独立测试
听起来是针对单个功能的真正单元测试。test_integrated
是对更高级别功能的测试,它依赖于在test_isolated
中测试的功能所提供的一些较低级别功能。
test_integrated
在从开始到结束检索产品数据的整个过程中,需要一点时间来执行pip3 install hemnes
1
接下来是什么
发布历史记录
许可证
推荐PyPI第三方库