Python3爬虫常用技术总结

闲着没事,我也写一下我自己用到的一些最简单的爬虫所需的技术和工具,以后可能就不想写爬虫了,毕竟爬虫深似海!哎?,也为自己做一个笔记,如果能帮到部分爬虫新手的话就更好了
下图是我在看到的一幅图片,说出了我的心声,献给入爬虫坑的新手们。
Python3爬虫常用技术总结_第1张图片
而且现在基本都是抓取APP数据,说难也难,说简单也简单
简单:
app的数据比web端数据更容易抓取,基本都是http、https协议,返回的数据格式也相对规整,
大多是json格式
困难:
1.需要反编译的知识,需要分析加密算法
2.需要脱壳+反编译
3.需要破解各式各类的签名,证书.
所以一个爬虫工程师慢慢就需要掌握以下技能:
java编程基础
android编程基础
app逆向
app脱壳
破解加密

从入门到全栈?

文章目录

  • 后续有时间补上

正则篇

  • 因为我是用爬虫来抓取文章的,一般就是提取文章数据,或者去除下标签之类的,顺便说一下我这几步正则只对标签做处理,没有处理到任何文字, 当然style样式除外。

需求一: 要求文章只需要保存p和img标签,其他标签全部都去掉
需求二: 去掉p标签和img标签的其他style样式,当然我那个img标签里面的图片src是上传到七牛云上面的。
当然如果读者 有其他需求的正则,我有空也可以帮忙写一下

# 去掉除了p标签和Img标签之外的其他标签
import re
content = """
ofo破产?官方声明来了!

ofo回应破产传闻:消息严重不实,目前运营一切正常。此前新京报称,ofo运营主体拜克洛克首次现身全国...

本文来自全天候科技,阅读更多请登陆www.awtmt.com或华尔街见闻APP。

4月2日,全国企业破产重整案件信息网显示,ofo运营主体之一北京拜克洛克科技有限公司作为“被申请人”而出现,申请人为聂艳,日期是3月25日,办理法院为北京海淀区人民法院。多家媒体质疑ofo是否陷入破产危机。

下午,ofo回应破产传闻:消息严重不实,目前运营一切正常。此前新京报称,ofo运营主体拜克洛克首次现身全国破产信息网。

ofo破产?官方声明来了!

在此声明之前,ofo一直处于舆论的风口浪尖,从明星创业公司到濒临破产,ofo快速经历了这一切过程。

退押金风波

2018年12月中旬,ofo待退押金总额一再刷新。据全天候科技获悉,截至12月18日20时37分,排队退押用户数突破1000万。

ofo用户押金主要有99元与199元两种。如果以99元/位计算,保守估计,ofo需退还押金总额约10亿元;但若以199元/位计算,那么ofo需要退还高达近20亿元的押金。

ofo破产?官方声明来了!

图片来源:网络

数据仍在不断增加,有不少ofo用户被曝前往ofo北京总部(位于北京中关村的互联网金融中心)寻求退押金,现场排起了长队。

ofo方面于去年12月17日晚推出新政:自2018年12月18日起,凡在App内提交线上申请退押金的用户,后台系统会根据申请提交的顺序进行相关信息审核与收集,核实完毕后用户将进入退押金序列,ofo将按顺序退款;如有线下登记的用户此前已经发起退款申请,则按此前的队列时间信息为准。

ofo小黄车还提醒:由于用户基数大,存在退押金申请激增的可能。同时,ofo承诺依序妥善处理好退押金事宜。

虽然做出了相关承诺,退押工作也在逐步推进,但用户仍忧心忡忡,担心万一ofo破产后拿不到押金。

招募区域化加盟代理商

为了给ofo续命化解经营危机,戴威也开始使用新的营销手段,比如招募ofo代理商。

据钛媒体,ofo城市代理运营商主要负责辖区内ofo共享单车的运营业务,单车所有权仍归属于ofo公司,代理运营商只负责单车的维修、秩序维护等,ofo按照后台数据来结算费用。

也就是说,ofo把原本属于各地分公司维护单车的任务外包了,负责维护的不再是自己员工,而是各地招募的代理商,此举可降低共享单车运营成本。

为号召更多代理商加入,ofo宣称共享单车代理商已经成为一个新的热门行业。日前,据接近ofo内部人士透露,ofo今年将大范围向全国三、四线城市推广代理模式,此前,ofo曾在山东威海、泰安等城市试运行“代理”模式,而在代理商模式之前,ofo尝试过合伙人、直营+代理等模式,效果均不甚理想。如今,ofo小黄车遭遇前所未有的资金链危机,采取降低成本的运营方案就不难理解。

ofo国内运营事业部总经理周伟国对此表示:“ofo进入精细化运营阶段,代理模式可将本土企业与行业巨头有效对接,既可实现引领行业快速发展,又能实现本土资源效率使用最大化,以最低的成本实现多赢发展。”

此前,为给ofo续命,公司已不断开源节流,如在App上推出短视频广告,用户扫码骑行前需要观看短视频;比如官方微信公众号接受广告投放,甚至售卖三无蜂蜜并被人诟病;甚至为了免付用户押金而计划把用户导流给网贷企业,在正式推送后当天即宣告下线。

而在宣布二三线城市开启代理运营商模式的前一天,ofo官方通报公司的反腐情况。经调查,ofo内部总共发生了8起腐败案件,其中4起已进入司法程序,5人被移送司法机关,涉案金额达数百万元,ofo也在积极追回账款。

虽然使出浑身解数开源节流,但ofo是否能真的走出破产危机尚不太乐观。

"""
content = re.sub(r"<(?!/?\s?p|/?\s?img)[^<>]*>", "", content) // 反向选择 去掉除了p和img之外的其他标签,可以在 | 后面在添加其他反向条件 content = re.sub(r"", r"

", content) // 替换p标签里面的style样式 # 分组替换 掉img标签里面的style样式, 但是保留img里面的src属性 # content = re.sub(r"[\s\S]*?)[\"|\'][\s\S]*?>", r"’>", content) # 方式一 这种是匹配src的链接 content = re.sub(r"src=[\"|\'][\s\S]*?[\"|\'])[\s\S]*?>", r" >", content) # 方式二 匹配整个src \g是获取前面分组命名的固定写法 print(content) # 说个小技巧吧,应该大部分都知道,正则匹配的时候,可以先用repr(temp_str) 查看原始数据。 # 输出 """

ofo回应破产传闻:消息严重不实,目前运营一切正常。此前新京报称,ofo运营主体拜克洛克首次现身全国...

本文来自全天候科技,阅读更多请登陆www.awtmt.com或华尔街见闻APP。

4月2日,全国企业破产重整案件信息网显示,ofo运营主体之一北京拜克洛克科技有限公司作为“被申请人”而出现,申请人为聂艳,日期是3月25日,办理法院为北京海淀区人民法院。多家媒体质疑ofo是否陷入破产危机。

下午,ofo回应破产传闻:消息严重不实,目前运营一切正常。此前新京报称,ofo运营主体拜克洛克首次现身全国破产信息网。

在此声明之前,ofo一直处于舆论的风口浪尖,从明星创业公司到濒临破产,ofo快速经历了这一切过程。

退押金风波

2018年12月中旬,ofo待退押金总额一再刷新。据全天候科技获悉,截至12月18日20时37分,排队退押用户数突破1000万。

ofo用户押金主要有99元与199元两种。如果以99元/位计算,保守估计,ofo需退还押金总额约10亿元;但若以199元/位计算,那么ofo需要退还高达近20亿元的押金。

图片来源:网络

数据仍在不断增加,有不少ofo用户被曝前往ofo北京总部(位于北京中关村的互联网金融中心)寻求退押金,现场排起了长队。

ofo方面于去年12月17日晚推出新政:自2018年12月18日起,凡在App内提交线上申请退押金的用户,后台系统会根据申请提交的顺序进行相关信息审核与收集,核实完毕后用户将进入退押金序列,ofo将按顺序退款;如有线下登记的用户此前已经发起退款申请,则按此前的队列时间信息为准。

ofo小黄车还提醒:由于用户基数大,存在退押金申请激增的可能。同时,ofo承诺依序妥善处理好退押金事宜。

虽然做出了相关承诺,退押工作也在逐步推进,但用户仍忧心忡忡,担心万一ofo破产后拿不到押金。

招募区域化加盟代理商

为了给ofo续命化解经营危机,戴威也开始使用新的营销手段,比如招募ofo代理商。

据钛媒体,ofo城市代理运营商主要负责辖区内ofo共享单车的运营业务,单车所有权仍归属于ofo公司,代理运营商只负责单车的维修、秩序维护等,ofo按照后台数据来结算费用。

也就是说,ofo把原本属于各地分公司维护单车的任务外包了,负责维护的不再是自己员工,而是各地招募的代理商,此举可降低共享单车运营成本。

为号召更多代理商加入,ofo宣称共享单车代理商已经成为一个新的热门行业。日前,据接近ofo内部人士透露,ofo今年将大范围向全国三、四线城市推广代理模式,此前,ofo曾在山东威海、泰安等城市试运行“代理”模式,而在代理商模式之前,ofo尝试过合伙人、直营+代理等模式,效果均不甚理想。如今,ofo小黄车遭遇前所未有的资金链危机,采取降低成本的运营方案就不难理解。

ofo国内运营事业部总经理周伟国对此表示:“ofo进入精细化运营阶段,代理模式可将本土企业与行业巨头有效对接,既可实现引领行业快速发展,又能实现本土资源效率使用最大化,以最低的成本实现多赢发展。”

此前,为给ofo续命,公司已不断开源节流,如在App上推出短视频广告,用户扫码骑行前需要观看短视频;比如官方微信公众号接受广告投放,甚至售卖三无蜂蜜并被人诟病;甚至为了免付用户押金而计划把用户导流给网贷企业,在正式推送后当天即宣告下线。

而在宣布二三线城市开启代理运营商模式的前一天,ofo官方通报公司的反腐情况。经调查,ofo内部总共发生了8起腐败案件,其中4起已进入司法程序,5人被移送司法机关,涉案金额达数百万元,ofo也在积极追回账款。

虽然使出浑身解数开源节流,但ofo是否能真的走出破产危机尚不太乐观。

"""

说个很方便的小技巧, 需要用到sublime编辑工具, (ps:在慕课网上学的)
比如爬虫会携带一大堆请求头数据,直接复制别人的header 需要自己手动一个个添加引号
1 打开sublime
2 粘贴请求头
3 按ctrl+h 组合键 注意需要开启正则模式才行 点击 .* 开启
4 点击 replace all 就好了

(.*?):\s(.*)      # Find  
"$1": "$2",     # Replace

Python3爬虫常用技术总结_第2张图片
转换之后就是这样的 不用手动添加引号 特别方便
Python3爬虫常用技术总结_第3张图片

简单图片识别

使用pytesseract 库简单图片识别, 效果不是很好,复杂的情况建议直接打码平台,
注意:安装的时候有些小坑, 而且 chi_sim中文识别,这个库需要去github 上面下载地址我忘了

from PIL import Image
import pytesseract
# 方式一 处理本地图片
im = Image.open("./aaa.png")
text = pytesseract.image_to_string(im, lang='chi_sim')   # 处理图片 lang是选择的语言,默认识别英文和数字
# 具体安装运行 可能有些坑, 
print(text)
# --------------------------------------------------
# 方式二 处理url图片字节流
import io
img2 = requests.get(url, headers=headers, stream=True)
byte_stream = io.BytesIO(img2.content)
img2_str = pytesseract.image_to_string(Image.open(byte_stream))
print(img2_str)

检测代理IP是否有效

代理IP,每个爬虫人员多少都会用到一点的,检测代理IP的方式也有很多种,这只是其中之一

import telnetlib

# 连接Telnet服务器
try:
	# 参数说明                   ip             端口        超时时间 
    tn = telnetlib.Telnet('115.227.159.73', port='4312', timeout=10)   
except Exception as e:
    print('失败', e)
else:
    print('成功')

Linux 定时任务篇

有时候我需要去定时之前的爬虫数据。
定时任务在Ubuntu系发行版和 Cetntos系上,操作稍微有点不一样, 总体是一样的。
定时任务的重要性,引用下下面网站的一句话:Cron job failures can be disastrous!

  • 推荐一个站点 专门测试定时任务脚本的 https://crontab.guru/
crontab -e   # 进入定时任务编辑界面
# 就可以进入编辑界面 用法和Vi编辑器差不多  # Ubuntu上或许第一进入会让你选择用什么编辑器 我现在只记得选择的第三种
# 可以写你的定时任务脚本了 
# 可参考 https://crontab.guru/
ctrl+O  # 回车 Enter 确认定时任务文件名
ctrl+X  # 保存退出

# 写完之后 最好重启下
写完一个定时任务命令之后需要重启,下面是相关的操作语句。
注意不同发行版的不同 参考链接  https://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/
# Debian/Ubuntu/Linux EXamples:
sudo service cron status   
sudo service cron stop
sudo service cron start
sudo service cron restart
# RHEL/CentOS/Fedor Linux:
service crond status
service crond stop
service crond start
service crond restart

如果报:Redirecting to /bin/systemctl start  crond.service
估计是使用的是Centos7或者Fedora高版本,启用服务变化了。
就执行:
systemctl restart crond.service
# 查看你现在正在执行中的定时任务
crontab -l

Linux后台运行Python文件

有时候,写了一些小脚本,就一个py文件写的,需要丢到服务器让它慢慢跑,这时就需要后台运行了,然后关于命令 2>&1的解释,我搜了下StackOverflow上面的解释 ,有兴趣可以了解了解https://stackoverflow.com/questions/818255/in-the-shell-what-does-21-mean 如果这个网站访问慢打不开,参考我之前转载博客可以解决。

# nohup 命令可能需要安装
# 后台运行  表示不挂起(no hang up)  使用-u参数,使得python不启用缓冲
nohup python -u test.py > test.log 2>&1 &

关于 requests 库的操作

  • cookies的用法
# 使用cookie的话,我就推荐用requests的姊妹库requests_html, 对cookie操作更友好
from requests_html import HTMLSession
session = HTMLSession()  # 使用方法和requests一样(因为都是kennethreitz写的)
res = session.get("http://www.baidu.com")
dict_current_cookie = session.cookies.get_dict()   # dict类型的cookie
print(dict_current_cookie)  # 可以把cookie保存到redis之类的地方

# 加载使用 cookie 我是使用的这种笨办法, 重新把格式重组的
old_cookie = ";".join([f"{i}={dict_current_cookie[i]}" for i in dict_current_cookie])

s = session.get(example_url, cookies=old_cookie)
  • 请求媒体资源文件,比如小视频,音乐,图片等
import requests
 
with requests.get("http://xxx.xxx.com/xxxx.mp4", stream=True) as req:
    with open("./test_name.mp4", "wb+") as f:
        f.write(req.content)

  • 未完待续…

你可能感兴趣的:(Python)