大家好,我是小五🧐
每天起床第一句,人生苦短,快学Python!
作为一个爬虫小菜鸟,一般爬的网站都是比较简单。
也就是先F12接口抓包,再requests爬取。
往往还需要复制header、Cookie等。
太麻烦了,对于我们来说,有没有更简单的办法呢?
确实可以提高一定效率,比如:curl请求命令转Python请求代码!
curl转Python
curl是利用URL语法在命令行方式下工作的开源文件传输工具,支持文件的上传和下载,是综合传输工具。[1]
以猫眼电影榜单为例,先在Google游览器中,右键复制网络抓到的网络请求为cURL(bash)。
然后打开任意一个可以转换的网站,比如这个
https://curl.trillworks.com/
。
将刚刚复制的内容,填写该网站左侧,右侧同时生成了对应的
python requests
代码。
剩下的大家就可以自行选择合适的选择器了,比如正则表达式、BeautifulSoup、Xpath、CSS选择器等等。
是不是方便很多了。
但我们还是不希望来回切换网页,最好都能在Python代码中直接使用。
Python代码中使用
还是希望在Python中直接运行,所以今天给大家介绍的Python库,叫做
filestools
,由小小明开发,直接使用如下命令,安装后使用。
pip install filestools --index-url=http://mirrors.aliyun.com/pypi/simple -U
这个库一共集成了4个功能,4个库都已经全部迁移到了filestools库中,因此安装这一个库,就可以使用所有的4个功能了,你只需要在使用对应功能,分别导入对应的模块即可。
之前已经给大家安利过
图片加水印
的功能了,具体见:
2行Python给图片加水印,太强了!
4个功能之一的curl2py命令,则是可以将curl命令转换为Python代码[2]。
帮助文档如下:
E:\>curl2py -h
usage: curl2py [-h] [-f FILE] [-o OUT] [-t] [-c]
将curl网络请求命令转换成Python的requests库请求代码,-f/-t/-o三个参数均没有指定时,结果将保存到剪切板中
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE 被转换的curl命令文件,-o和-t参数均没有指定将保存到对应的同名py脚本中,不指定则从直接对剪切板操作
-o OUT, --out OUT 生成py脚本的保存位置
-t, --tmp py脚本是否保存到当前目录的tmp.py中
-c, --copy 始终copy结果到剪切板
不过今天我们主要讲,要在Python中直接调用。
只要将刚刚右键复制为
cURL(bash)
得到的内容,插入下方代码中。
from curl2py.curlParseTool import curlCmdGenPyScript
curl_cmd = '''右键复制为cURL(bash)'''
output = curlCmdGenPyScript(curl_cmd)
print(output)
运行后就可以得到,与前文中转换网站一样的效果了。
将生成的代码复制到代码框里,配合选择器,运行。
response.encoding='utf-8'
#正则匹配
re_name = re.findall('data-val="{movieId:.*?}">(.*?)</a>',response.text)
re_star = re.findall('<p class="star">\n (.*?)\n </p>',response.text,re.S)
re_releasetime = re.findall('<p class="releasetime">(.*?)</p>',response.text)
re_integer = re.findall('<i class="integer">(.*?)</i>',response.text)
re_fraction = re.findall('<i class="fraction">(.*?)</i>',response.text)
score =[]
for n in range(len(re_integer)):
score.append(re_integer[n]+re_fraction[n])
for i in range(len(re_name)):
content = re_name[i]+' '+score[i]+' '+re_star[i]+' '+re_releasetime[i]
print(content)
成功爬取到猫眼榜单数据。
如果你使用 Jupyter Notebook 的话,可以
使用插件
snippets
来自定义代码块
,将
curl2py
这段代码设为模板,实现代码复用。其他编辑器也有类似功能,可以自行搜索。这大大节省了我们的工具效率!
注:如果你还对反向转换感兴趣的话,即requests代码转为CURL命令,可以了解一下curlify模块。
如果你想详细学习filestools库,参考下方网站:
https://pypi.org/project/filestools/
参考资料
[1]
阮一峰的网络日志 curl 的用法指南:
http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
[2]
filestools 0.1.2:
https://pypi.org/project/filestools/