为Kickstarter等众筹平台项目抓取信息的爬虫
项目描述
# KickScraper
本项目提供API以查询Kickstarter项目信息。这是通过抓取网站或访问未记录的API实现的,因此该软件按原样提供。
要检查一切是否正常工作并且所需数据可以从Kickstarter页面中提取,从项目根目录执行
`PYTHONPATH=. py.test`
要安装,只需执行
`pip install kickscraper`
# 使用方法
使用此包的正常流程是搜索项目然后访问其信息。一些示例
```python
>>> from kickscraper import Project
>>> p = Project(name='Exploding kittens')
>>> p.title
'Exploding Kittens'
>>> p.state
'successful'
>>> p.pledged
8782571.99
>>> p.goal
10000.0
>>> p.launched
1421776819
>>> p.deadline
1424397600
>>> p.backers_count
219382
>>> p.photo['thumb']
'https://ksr-ugc.imgix.net/projects/1542071/photo-original.png?v=1420836802&w=40&h=30&fit=crop&auto=format&q=92&s=13dfdfc7e3b916eba80e19fdea09ebd9'
>>> p.rewards
{'3531560': {'backers': '15,505 backers',
'description': "THE EXPLODING KITTENS DECK\nOne copy of Exploding Kittens. (Ages 7+)\n-To order multiple decks, just add $20 for each extra deck you'd like. (extra shipping charges may apply)\n\nLess",
'title': 'Pledge $20 or more\n\n\nAbout $20 USD',
'uid': '3531560'},
'3531561': {'backers': '202,934 backers',
'description': "成人版卡牌包\nExploding Kittens卡牌包一套加上NSFW卡牌包一套。这是一些过于恐怖/难以置信,无法包含在儿童友好版本中的奖励卡牌。(适用于30岁以上)\n- 若要订购多套卡牌包,只需额外支付35美元即可。(可能产生额外运费)\n\n更少",
'title': '捐赠35美元或以上\n\n\n约35美元',
'uid': '3531561'},
'3531562': {'backers': '200位支持者\n\n已全部售罄!',
'description': "收藏家版卡牌包\n包含之前奖励中的两套卡牌包,但每套中的一张将由游戏创作者签名。(这样你就不必用你的脏手破坏那些华丽的签名卡牌了。)\n\n更少",
'title': '捐赠100美元或以上\n\n\n约100美元',
'uid': '3531562'},
'3571711': {'backers': '5位支持者\n\n已全部售罄!',
'description': "传说版卡牌包\n包含之前奖励中的所有内容,每位游戏创作者还将为你绘制一张定制卡牌。(对于Elan的绘画技巧,我们提前道歉。)\n\n更少",
'title': '捐赠500美元或以上\n\n\n约500美元',
'uid': '3571711'}}
>>> p.early_birds
{'3531562': {'backers_left': 0,
'description': "收藏家版卡牌包\n包含之前奖励中的两套卡牌包,但每套中的一张将由游戏创作者签名。(这样你就不必用你的脏手破坏那些华丽的签名卡牌了。)\n\n更少",
'title': '捐赠100美元或以上',
'uid': '3531562'},
'3571711': {'backers_left': 0,
'description': "传说版卡牌包\n包含之前奖励中的所有内容,每位游戏创作者还将为你绘制一张定制卡牌。(对于Elan的绘画技巧,我们提前道歉。)\n\n更少",
'title': '捐赠500美元或以上',
'uid': '3571711'}}
```
对于KickStarter后端,有一个`project_json`属性,可以检索从HTTP端点查询中获取的额外信息。您也可以通过`p.connector.<attribute_name>`的正常方式访问此属性。
```python
>>> p.project_json["creator"]
{'id': 1281334714, 'name': 'Elan Lee', 'slug': 'elanlee', 'urls': {'api': {'user': 'https://api.kickstarter.com/v1/users/1281334714?signature=1455539957.142a29e448e4410d7571985d81f89f7820387092'}, 'web': {'user': 'https://www.kickstarter.com/profile/elanlee'}}, 'avatar': {'small': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=80&h=80&fit=crop&auto=format&q=92&s=7a5f8ccef6aec840b071b227f0c8857f', 'medium': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=160&h=160&fit=crop&auto=format&q=92&s=b7f47cefe817c8e4d60e8fb6bc59312b', 'thumb': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=40&h=40&fit=crop&auto=format&q=92&s=fe45920ced0997320f5d5a60321fbde7'}}
>>> p.creator
{'id': 1281334714, 'name': 'Elan Lee', 'slug': 'elanlee', 'urls': {'api': {'user': 'https://api.kickstarter.com/v1/users/1281334714?signature=1455539957.142a29e448e4410d7571985d81f89f7820387092'}, 'web': {'user': 'https://www.kickstarter.com/profile/elanlee'}}, 'avatar': {'small': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=80&h=80&fit=crop&auto=format&q=92&s=7a5f8ccef6aec840b071b227f0c8857f', 'medium': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=160&h=160&fit=crop&auto=format&q=92&s=b7f47cefe817c8e4d60e8fb6bc59312b', 'thumb': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=40&h=40&fit=crop&auto=format&q=92&s=fe45920ced0997320f5d5a60321fbde7'}}
```
还有一些端点允许您搜索项目(`kickscraper.search_projects`)并从返回列表中获取第一个项目(`kickscraper.search_project`)
```python
>>> kickscraper.search_projects("Kittens")['total_hits']
116
>>> kickscraper.search_project("Kittens")["name"]
'Laser Kittens: about tiny kitties growing up'
>>> kickscraper.search_project("Explode Kittens")["name"]
'Exploding Kittens'
```
在内部,`Project`类使用`search_project`根据给定的名称获取项目。请注意这一点,因为您可能会获取错误的项目(例如,在“_Kittens_”搜索中,我预计会首先加载“_Exploding Kittens_”项目,而不是“_Laser Kittens_”项目)。
# 类参考
## Project
- **Project.uid: int**
- **Project.title: str**
- **Project.photo: dict**
- **Project.pledged: float**
- **Project.goal: float**
- **Project.state: str**
- **Project.currency: str**
- **Project.launched: int (unix time)**
- **Project.deadline: int (unix time)**
- **Project.backers_count: int**
- **Project.rewards: dict**
- **Project.early_birds: dict**
# TODO
- 测试需要更智能。可能是使用参数化的pytest测试或其他方法。需要
重用主程序和后端或类似的测试...
- 添加日志。
- 允许根据uid或url加载项目?。
- 更智能地加载项目(检查是否存在按流行度搜索)。
本项目提供API以查询Kickstarter项目信息。这是通过抓取网站或访问未记录的API实现的,因此该软件按原样提供。
要检查一切是否正常工作并且所需数据可以从Kickstarter页面中提取,从项目根目录执行
`PYTHONPATH=. py.test`
要安装,只需执行
`pip install kickscraper`
# 使用方法
使用此包的正常流程是搜索项目然后访问其信息。一些示例
```python
>>> from kickscraper import Project
>>> p = Project(name='Exploding kittens')
>>> p.title
'Exploding Kittens'
>>> p.state
'successful'
>>> p.pledged
8782571.99
>>> p.goal
10000.0
>>> p.launched
1421776819
>>> p.deadline
1424397600
>>> p.backers_count
219382
>>> p.photo['thumb']
'https://ksr-ugc.imgix.net/projects/1542071/photo-original.png?v=1420836802&w=40&h=30&fit=crop&auto=format&q=92&s=13dfdfc7e3b916eba80e19fdea09ebd9'
>>> p.rewards
{'3531560': {'backers': '15,505 backers',
'description': "THE EXPLODING KITTENS DECK\nOne copy of Exploding Kittens. (Ages 7+)\n-To order multiple decks, just add $20 for each extra deck you'd like. (extra shipping charges may apply)\n\nLess",
'title': 'Pledge $20 or more\n\n\nAbout $20 USD',
'uid': '3531560'},
'3531561': {'backers': '202,934 backers',
'description': "成人版卡牌包\nExploding Kittens卡牌包一套加上NSFW卡牌包一套。这是一些过于恐怖/难以置信,无法包含在儿童友好版本中的奖励卡牌。(适用于30岁以上)\n- 若要订购多套卡牌包,只需额外支付35美元即可。(可能产生额外运费)\n\n更少",
'title': '捐赠35美元或以上\n\n\n约35美元',
'uid': '3531561'},
'3531562': {'backers': '200位支持者\n\n已全部售罄!',
'description': "收藏家版卡牌包\n包含之前奖励中的两套卡牌包,但每套中的一张将由游戏创作者签名。(这样你就不必用你的脏手破坏那些华丽的签名卡牌了。)\n\n更少",
'title': '捐赠100美元或以上\n\n\n约100美元',
'uid': '3531562'},
'3571711': {'backers': '5位支持者\n\n已全部售罄!',
'description': "传说版卡牌包\n包含之前奖励中的所有内容,每位游戏创作者还将为你绘制一张定制卡牌。(对于Elan的绘画技巧,我们提前道歉。)\n\n更少",
'title': '捐赠500美元或以上\n\n\n约500美元',
'uid': '3571711'}}
>>> p.early_birds
{'3531562': {'backers_left': 0,
'description': "收藏家版卡牌包\n包含之前奖励中的两套卡牌包,但每套中的一张将由游戏创作者签名。(这样你就不必用你的脏手破坏那些华丽的签名卡牌了。)\n\n更少",
'title': '捐赠100美元或以上',
'uid': '3531562'},
'3571711': {'backers_left': 0,
'description': "传说版卡牌包\n包含之前奖励中的所有内容,每位游戏创作者还将为你绘制一张定制卡牌。(对于Elan的绘画技巧,我们提前道歉。)\n\n更少",
'title': '捐赠500美元或以上',
'uid': '3571711'}}
```
对于KickStarter后端,有一个`project_json`属性,可以检索从HTTP端点查询中获取的额外信息。您也可以通过`p.connector.<attribute_name>`的正常方式访问此属性。
```python
>>> p.project_json["creator"]
{'id': 1281334714, 'name': 'Elan Lee', 'slug': 'elanlee', 'urls': {'api': {'user': 'https://api.kickstarter.com/v1/users/1281334714?signature=1455539957.142a29e448e4410d7571985d81f89f7820387092'}, 'web': {'user': 'https://www.kickstarter.com/profile/elanlee'}}, 'avatar': {'small': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=80&h=80&fit=crop&auto=format&q=92&s=7a5f8ccef6aec840b071b227f0c8857f', 'medium': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=160&h=160&fit=crop&auto=format&q=92&s=b7f47cefe817c8e4d60e8fb6bc59312b', 'thumb': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=40&h=40&fit=crop&auto=format&q=92&s=fe45920ced0997320f5d5a60321fbde7'}}
>>> p.creator
{'id': 1281334714, 'name': 'Elan Lee', 'slug': 'elanlee', 'urls': {'api': {'user': 'https://api.kickstarter.com/v1/users/1281334714?signature=1455539957.142a29e448e4410d7571985d81f89f7820387092'}, 'web': {'user': 'https://www.kickstarter.com/profile/elanlee'}}, 'avatar': {'small': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=80&h=80&fit=crop&auto=format&q=92&s=7a5f8ccef6aec840b071b227f0c8857f', 'medium': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=160&h=160&fit=crop&auto=format&q=92&s=b7f47cefe817c8e4d60e8fb6bc59312b', 'thumb': 'https://ksr-ugc.imgix.net/avatars/195345/mmotel_elan_lee_05_on_white_0592-2.original.jpg?v=1419440819&w=40&h=40&fit=crop&auto=format&q=92&s=fe45920ced0997320f5d5a60321fbde7'}}
```
还有一些端点允许您搜索项目(`kickscraper.search_projects`)并从返回列表中获取第一个项目(`kickscraper.search_project`)
```python
>>> kickscraper.search_projects("Kittens")['total_hits']
116
>>> kickscraper.search_project("Kittens")["name"]
'Laser Kittens: about tiny kitties growing up'
>>> kickscraper.search_project("Explode Kittens")["name"]
'Exploding Kittens'
```
在内部,`Project`类使用`search_project`根据给定的名称获取项目。请注意这一点,因为您可能会获取错误的项目(例如,在“_Kittens_”搜索中,我预计会首先加载“_Exploding Kittens_”项目,而不是“_Laser Kittens_”项目)。
# 类参考
## Project
- **Project.uid: int**
- **Project.title: str**
- **Project.photo: dict**
- **Project.pledged: float**
- **Project.goal: float**
- **Project.state: str**
- **Project.currency: str**
- **Project.launched: int (unix time)**
- **Project.deadline: int (unix time)**
- **Project.backers_count: int**
- **Project.rewards: dict**
- **Project.early_birds: dict**
# TODO
- 测试需要更智能。可能是使用参数化的pytest测试或其他方法。需要
重用主程序和后端或类似的测试...
- 添加日志。
- 允许根据uid或url加载项目?。
- 更智能地加载项目(检查是否存在按流行度搜索)。
项目详情
关闭
kickscraper-0.1.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d9d2d1ec846f6b9ca11dd49fe710b3a66eaab20b56819f0a638e4325401426cb |
|
MD5 | f8ad86ca9b60c7dd1a0aefc1c1969df5 |
|
BLAKE2b-256 | d3eeaf5ed84cc95065a26be194e7377cae8f0050b73212435f8dc49013bf7ad4 |