专栏首页快学Python每一个搞爬虫的人,都应该知道的神器!

每一个搞爬虫的人,都应该知道的神器!

大家好,我是小五🧐

每天起床第一句,人生苦短,快学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/

本文分享自微信公众号 - 快学Python(kxpython),作者:朱小五

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每个人都应该知道的25个Git命令

    我们大多数时候都使用IDE和其他软件来编写命令,但为了更好的工作,我们还需要随时准备一些可以随手使用的命令,以备不时之需。

    码农编程进阶笔记
  • 25个每个人都应该知道的Git命令

    英文 | https://javascript.plainenglish.io/25-git-commands-everyone-should-know-e9a...

    @超人
  • 每个人都应该知道的十个机器学习常识

    当别人在高谈阔论机器学习时,你却插不上嘴,这是一种怎样的体验?不懂机器学习没有关系,但你一定要知道下面的十个机器学习基本常识。曾经在Endeca、谷歌和Link...

    企鹅号小编
  • 每个开发人员都应该知道的WebSockets知识

    在Internet发展的早期,Web应用程序是围绕由用户交互触发的HTTP请求而构建的。随着技术的进步,对实时数据传输和双向通信的需求出现了。这是低延迟应用程序...

    葡萄城控件
  • 75个每个人都应该知道的大数据术语

    在第一篇文章中介绍了以下术语:算法,分析,描述性分析,规定分析,预测分析,批处理,Cassandra,云计算,集群计算,黑暗数据,数据湖,数据挖掘,数据科学家,...

    首席架构师智库
  • Python之每个人都应该知道的30个一行代码程序

    原文地址:http://wp.fang1688.cn/study/313.html

    优派编程
  • 每个开发人员都应该知道的11个Linux命令

    本文主要挑选出读者有必要首先学习的 11 个 Linux 命令,如果不熟悉的读者可以在虚拟机或云服务器上实操下,对于开发人员来说,能熟练掌握 Linux 做一些...

    武培轩
  • 每个开发人员都应该知道的 10 个 GitHub 仓库

    GitHub 不仅是互联网上最有趣的开源项目的所在地,而且还是共享各种资源的好地方,从免费的书籍到 API ,产品路线图到项目思路到项目方案。

    IT大咖说
  • 每个开发人员都应该知道的 10 个 GitHub 仓库

    GitHub 不仅是互联网上最有趣的开源项目的所在地,而且还是共享各种资源的好地方,从免费的书籍到 API ,产品路线图到项目思路到项目方案。

    肉眼品世界
  • 每个人都应该知道的云计算网络安全

    许多企业主和管理人员都在怀疑所采用的云计算是否安全,能否免受网络攻击。就像其他任何类型的技术一样,云计算技术也是脆弱的。但是,其安全漏洞的风险很小。为了理解云计...

    静一
  • 每个极客都应该知道的Linux技巧

    检查不是由你运行的程序 难度:高级 应用程序:bash(译注:UNIX或者LINUX的shell) 想象下这个场景-你已经准备好了要和同事在办公室里对战一局快速...

    小小科
  • 每个程序员都应该知道的GitHub Repos

    GitHub是领先的Git存储库托管服务,其中包含许多代码存储库,库等的源代码。

    硬核编程
  • 每个程序员都应该知道的算法

    大家好,今天我要开始一个名为“每个程序员都应该知道的算法”的系列。在本系列中,我们将研究各种算法,例如搜索,排序,图形,数组等。

    海拥
  • 干货 | 关于反爬虫,看这一篇就够了

    你被爬虫侵扰过么?当你看到“爬虫”两个字的时候,是不是已经有点血脉贲张的感觉了?千万要忍耐,稍稍做点什么,就可以在名义上让他们胜利,实际上让他们受损失。 一、为...

    携程技术
  • 每个 Java 开发人员都应该知道的 10 个基本工具

    大家好,我们已经在 2019 年的第 9 个月,我相信你们所有人已经在 2019 年学到了什么,以及如何实现这些目标。我一直在写一系列文章,为你提供一些关于你可...

    淡定的蜗牛
  • 携程:关于反爬虫,看这一篇就够了

    编者:本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击视频回放(http://v.qq.com/pag...

    逸鹏
  • 关于反爬虫,看这一篇就够了

    本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击下方视频,“现场”围观段子手攻城狮大崔,如何高智商&高...

    华章科技
  • 一文揭秘,爬虫那些不为人知的套路

    1、真实世界的爬虫比例 大家应该听过一句话吧,大概意思是说,整个互联网上大概有50%以上的流量其实是爬虫。第一次听这句话的时候,我还不是很相信,我觉得这个说法实...

    BestSDK
  • 每个Python新手都应该知道的一些编程技巧

    每天你都应该努力提升自己的编码技能,今天我给Python新手带来了一些编程建议。 Python箴言 打开Python交互终端并运行下面命令 然后命令会有一些输出...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券