爬虫介绍
# 1. 什么是爬虫?
网络爬虫也叫网络蜘蛛,如果把互联网比喻成一个蜘蛛网,那么蜘蛛就是在网上爬来爬去的蜘蛛,爬虫程序通过请求url地址,根据响应的内容进行解析采集数据, 比如:如果响应内容是html,分析dom结构,进行dom解析、或者正则匹配,如果响应内容是xml/json数据,就可以转数据对象,然后对数据进行解析。
# 2. 有什么作用?
通过有效的爬虫手段批量采集数据,可以降低人工成本,提高有效数据量,给予运营/销售的数据支撑,加快产品发展。
#
# 3. 业界的情况
目前互联网产品竞争激烈,业界大部分都会使用爬虫技术对竞品产品的数据进行挖掘、采集、大数据分析,这是必备手段,并且很多公司都设立了爬虫工程师
的岗位
# 4. 合法性
爬虫是利用程序进行批量爬取网页上的公开信息,也就是前端显示的数据信息。因为信息是完全公开的,所以是合法的。其实就像浏览器一样,浏览器解析响应内容并渲染为页面,而爬虫解析响应内容采集想要的数据进行存储。
# 5. 反爬虫
爬虫很难完全的制止,道高一尺魔高一丈,这是一场没有硝烟的战争,码农VS码农 反爬虫一些手段:
- 合法检测:请求校验(useragent,referer,接口加签名,等)
- 小黑屋:IP/用户限制请求频率,或者直接拦截
- 投毒:反爬虫高境界可以不用拦截,拦截是一时的,投毒返回虚假数据,可以误导竞品决策
- ... ...
# 6. 选择一门语言
爬虫可以用各种语言写, C++, Java都可以, 为什么要Python?
首先用C++搞网络开发的例子不多(可能是我见得太少) 然后由于Oracle收购了Sun, Java目前虽然在Android开发上很重要, 但是如果Google官司进展不顺利, 那么很有可能用Go语言替代掉Java来做Android开发. 在这计算机速度高速增长的年代里, 选语言都要看他爹的业绩, 真是稍不注意就落后于时代. 随着计算机速度的高速发展, 某种语言开发的软件运行的时间复杂度的常数系数已经不像以前那么重要, 我们可以越来越偏爱为程序员打造的而不是为计算机打造的语言. 比如Ruby这种传说中的纯种而又飘逸的的OOP语言, 或者Python这种稍严谨而流行库又非常多的语言, 都大大弱化了针对计算机运行速度而打造的特性, 强化了为程序员容易思考而打造的特性. 所以我选择Python
# 7. 选择Python版本
有2和3两个版本, 3比较新, 听说改动大. 根据我在知乎上搜集的观点来看, 我还是倾向于使用”在趋势中将会越来越火”的版本, 而非”目前已经很稳定而且很成熟”的版本. 这是个人喜好, 而且预测不一定准确. 但是如果Python3无法像Python2那么火, 那么整个Python语言就不可避免的随着时间的推移越来越落后, 因此我想其实选哪个的最坏风险都一样, 但是最好回报却是Python3的大. 其实两者区别也可以说大也可以说不大, 最终都不是什么大问题. 我选择的是Python 3
# 8. 爬虫基本套路
- 基本流程
- 目标数据
- 来源地址
- 结构分析
- 实现构思
- 操刀编码
- 基本手段
- 破解请求限制
- 请求头设置,如:useragant为有效客户端
- 控制请求频率(根据实际情景)
- IP代理
- 签名/加密参数从html/cookie/js分析
- 破解登录授权
- 请求带上用户cookie信息
- 破解验证码
- 简单的验证码可以使用识图读验证码第三方库
- 破解请求限制
- 解析数据
- HTML Dom解析
- 正则匹配,通过的正则表达式来匹配想要爬取的数据,如:有些数据不是在html 标签里,而是在html的script 标签的js变量中
- 使用第三方库解析html dom,比较喜欢类jquery的库
- 数据字符串
- 正则匹配(根据情景使用)
- 转 JSON/XML 对象进行解析
- HTML Dom解析
# 9. python爬虫
- python写爬虫的优势
- python语法易学,容易上手
- 社区活跃,实现方案多可参考
- 各种功能包丰富
- 少量代码即可完成强大功能
- 涉及模块包
- 请求
urllib
requests
- 多线程
threading
- 正则
re
- json解析
json
- html dom解析
beautiful soup
- lxml
- xpath
- 操作浏览器
selenium
- 请求
相关文章
- Apache Airflow的组件和常用术语
- [IJCAI 2022 | 论文简读] 不仅仅是同质性:结构感知路径聚合图神经网络
- [Nucleic Acids Res. | 论文简读] 使用纳米孔进行长读长单分子 RNA 结构测序
- [Nat. Commun. | 论文简读] 一个连接分子结构和生物医学文本的深度学习系统,其理解力可与人类专业人士相媲美
- [Nature Chemistry | 论文简读] 对酪氨酸的深度学习研究表明漫游会导致光损伤
- [BIB | 论文简读] BioGPT:用于生物医学文本生成和挖掘的生成性预训练转化器
- [MICCAI 2022 | 论文简读] ASA:用于预训练脑核磁分割的注意力对称自动编码器开源
- Jenkins: 如何更新当前构建名称和描述
- [KDD 2022 | 论文简读] 用于实体对齐的多模态孪生神经网络
- [Nat.Mach.Intell. | 论文简读] 基于深度学习的全天候自动驾驶鲁棒定位
- Jenkins: 获取文件变更列表、提交ID、提交人和提交信息
- [Nature Biotech | 论文简读] 合理化的深度学习超分辨率显微镜用于快速亚细胞过程的持续活体成像
- [Nature Chemical Biology | 论文简读] 人工智能揭示人类致癌代谢分子
- [Nature Communications | 论文简读] 使用弱监督深度学习进行准确的体细胞变异检测
- [Nature Communications | 论文简读] 一种用于清理单细胞RNA-Seq数据噪音的深度神经网络模型
- [Nature Biomedical Engineering | 论文简读] 通过深度学习检测眼部照片中的疾病迹象
- [J. Med. Chem. | 论文简读] RELATION:基于结构的新药设计深度生成模型
- [Genome Biology | 论文简读] 在评估单细胞RNA-seq数据聚类时考虑细胞类型层次关系
- [Bioinformatics | 论文简读] 用于从单细胞 RNA 测序数据中预测基因调控的图注意力网络
- [Nature Chemistry | 论文简读] 动态解除对接和准束缚态作为药物发现的工具