写了个爬虫用的小工具: LazySpider 发布啦!

2017-12-19 16:52:57 +08:00
 Ehco1996

lazyspider 并不是一个爬虫框架 他只是一个写爬虫时经常会用到的小工具

这是我实习的时候写了一个多月爬虫,期间遇到的一些坑, 想着有没有比较好的方式来解决, 于是lazyspider就诞生啦!名字是女票给起的,感觉还不错 hhh~

功能介绍

其实目前也就实现了两个功能

所以目前 lazy 里也只有两个小模块:

安装

直接用 pip 安装就可以 仅支持 py3~

pip install lazyspier

使用说明

lazyspider用起来十分简单

lazyheaders

主要用于格式化 cookies 和 headers

源字符串来自 chrome 开发工具页面请求的 Copy -> Copy as cURL

复制好原始字符串之后:

from lazyspider.lazyheaders import LazyHeaders

# 注意!字符串要包裹在 三引号 或 双引号 里
curl = "curl 'https://pypi.python.org/pypi' -H 'cookie: .....balabala...."

lh = LazyHeaders(curl)

headers = lh.getHeaders()
cookies = lh.getCookies()

print('*' * 40)
print('Headers: {}'.format(headers))
print('*' * 40)
print('Cookies: {}'.format(cookies))
print('*' * 40)

import requests
r = requests.get('https://pypi.python.org/pypi',
                 headers=headers, cookies=cookies)
print(r.status_code)

输出如下:

****************************************
Headers: {'origin': 'https', 'accept-encoding': 'gzip,deflate,br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,mt;q=0.7', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10_13_2)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.84Safari/537.36', 'content-type': '', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'cache-control': 'max-age=0', 'authority': 'pypi.python.org', 'referer': 'https'}
****************************************
Cookies: {'__utma': '32101439.146958433.1508462081.1509339065.1512998855.2', '__utmz': '32101439.1512998855.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)', '_ga': 'GA1.2.146958433.1508462081', '_gid': 'GA1.2.555764366.1513659919', 'login_nonce': 'V649T4tBPTqQmg87ElGoHXQFviJkoz', 'pypi': '520cfc4475316b0c3fc41091af563886'}
****************************************
200

是不是很方便呢?

lazystore

目前只封装了mysql的操作,用法也简单

初始化数据库连接

from lazyspider.lazystore import LazyMysql

# 数据库配置
TEST_DB = {
    'host': '127.0.0.1',
    'user': 'root',
    'password': 'xxx',
    'db': 'EhcoTestDb'
}
# 初始化数据库链接
store = LazyMysql(TEST_DB)

保存数据

# 将要保存的数据以字典格式存储
data = {'id': 1, 'name': 'ehco', 'age': 20}
# 新增数据的方法
# 只需要传入 数据<dict> 表名 两个参数
state = store.save_one_data(data, 'testtable')
print(state)
# 数据保存成功会返回 1
# 保存失败会返回-1 并答应错误堆栈
>>1

删除数据

# 这里我将 id 为 1 的数据删除
state = store.delete_by_field('testtable','id','1')
print (state)
>>1

更新数据

# 这里我更新 id 为 1 的 name 字段
data = {'id': 1, 'name': 'superehco', 'age': 20}
state = store.update_by_id(data, 'testtable', '1')
print(state)
>>1

查询数据

# 这里我更新 id 为 1 的 name 字段
res = store.find_by_field('testtable', 'age', '20')
print(res)
# 返回的是一个列表,每条查询记录都以字典格式返回
'''
[{'id': 1, 'name': 'superehco', 'age': 20}, {'id': 2, 'name': 'lurenjia', 'age': 20}]
'''

SQL 语句查询

# 手撸 sql 也是必备的
sql = "select * from testtable"
res = store.query(sql)
print(res)
'''
[{'id': 1, 'name': 'superehco', 'age': 20}, {'id': 2, 'name': 'lurenjia', 'age': 20}]
'''

结语

目前也就做了这两个非常小的功能, 但这些都是我在平日里工作中每天都需要打交道的事情

大家有什么好的想法可以一起开发~ 该项目已经放在GitHub上啦 地址: https://github.com/Ehco1996/lazySpider

最后求个 Star 不过分吧~

6263 次点击
所在节点    Python
40 条回复
welkinzh
2017-12-19 20:27:02 +08:00
emmm... postman 可以完成你的第一个功能
Ehco1996
2017-12-19 20:31:47 +08:00
@welkinzh
没有用过耶 明天去试试
scriptB0y
2017-12-19 20:35:16 +08:00
也推荐一下这个

https://curl.trillworks.com/
scriptB0y
2017-12-19 20:36:27 +08:00
@scriptB0y 之前总结了一些好用的爬虫工具,顺便贴下……

https://www.kawabangga.com/posts/2365
naiba
2017-12-19 20:38:32 +08:00
😓这种东西优化好再拿出来吧
mochanight
2017-12-19 22:19:33 +08:00
@scriptB0y 这是个神器。一直在用
mimzy
2017-12-19 22:25:37 +08:00
不错~MySQL 的这个封装给了我一些启发 刚好最近操作得比较烦~
fengche361
2017-12-19 22:28:42 +08:00
jeffreychiu95
2017-12-20 01:38:16 +08:00
不错,正需要
Ehco1996
2017-12-20 07:31:22 +08:00
@scriptB0y 不错耶 谢谢
Ehco1996
2017-12-20 07:31:49 +08:00
@naiba 什么意思 哪里有 bug 了
Ehco1996
2017-12-20 07:34:22 +08:00
@mimzy 哈哈可以把常用的数据库操作都封装一下 这样用起来就很方便了
lhx2008
2017-12-20 07:49:52 +08:00
好像,切文本这种,一行 lamda 就实现了
naiba
2017-12-20 08:07:50 +08:00
我的意思是做的稍微像点样了再拿出来,写了两个函数就拿出来有点不像话了。

http header to list

还一个 mysql 的,你不知道装个 ORM 吗

还是我给那个 iOCR 的评论,小儿科的东西不要往外拿。
xiaozizayang
2017-12-20 08:30:42 +08:00
支持楼主 谁不是新手来的
binux
2017-12-20 09:22:27 +08:00
ctro15547
2017-12-20 09:48:55 +08:00
hehhee 支持一下, 之前为了方便也跟做过这类事情,就当练习了。
Ehco1996
2017-12-20 11:38:23 +08:00
@naiba
不喜欢
觉得低级可以不用啊
我求着你用了?

我写什么是我的自由吧 和你有关系吗?
真不知道哪这么大抱怨
Ehco1996
2017-12-20 11:39:28 +08:00
@xiaozizayang
谢谢支持!
Ehco1996
2017-12-20 11:39:40 +08:00
@binux
学习了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX