一时兴起,做一个整理.不定期更新.
玩python爬虫断断续续一年了,当然实际时间可能才几小时>
当理解到这个爬虫本质就是发送HTTP或HTTPS请求并对得到的数据进行分析就比较简单了.
单件
requests 构造请求 传入headers,cookie,referer等常会校验的字段.如果是POST请求还要传入表单数据data.这里就是发送请求.当然涉及到反爬虫,这中间涉及到东西就很多了,光反爬虫就可以出本书.JS逆向,表单字段的分析等.可以多看看视频实战分析.
注:现在有requests-html,一样的作者.这个应该更好.
得到的数据需要分析.re lxml BeautifulSoup. 实际上并不常用Bs,因为解析速度比较慢,而且完全可以被代替.一般信息不多直接正则就行了.
lxml
是 Python 中一个常见的解析库,支持 HTML 与 XML 的解析,支持 XPath
解析方式
lxml解析文本为字符串后可以用xpath或cssselect选择节点.通过 lxml
解析之后的内容为一种特定类型的对象,一般称作 Element
对象. html.fromstring(string) etree.HTML(string)
cssselect就是css选择器.获取属性get() 获取文本text() text_content()
xpath全称 XML Path Language,即 XML 路径语言,XPath 可以基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。
bs Beautiful Soup 4 是 Python 的一款解析库,为了书写方便下文统一用 bs4 来描述。跟 lxml
一样,bs4 也是一个 HTML/XML 解析库,主要配合 requests 库实现爬虫程序。
bs4 库默认使用的 Python 标准库中的 HTML 解析器,即 html.parser
(Python 的内置标准库),使用该方式的解析速度慢,原因是该方式在解析的时候会载入整个文档之后再解析整个 DOM 树,导致内存开销变大,性能降低,所以现在使用 bs4 的时候都是配合 lxml
库进行,本实验也围绕 bs4 与 lxml 展开
ajax XHR
移动站点的爬取
如果发现一个网站,当切换到移动端访问的时候,域名发生了变化,例如上述案例中 58 同城网站由
https://www.58.com/
变为了https://m.58.com/
,此时大概率网站的接口也是单独为移动端研发的,只要接口是单独研发,很容易出现逻辑上的疏漏,导致移动端站点的反爬度降低,所以当你找到一个网站存在移动站点,建议针对该移动站点编写爬虫。
在爬取移动端接口的时候,需要注意一项内容,该内容为请求头中的 User-Agent
参数,前面的实验中已经对该参数进行了相关说明。该参数的内容会告知服务器客户端访问设备信息,所以在访问移动端网站的时候,建议使用特定的手机端浏览器 UA
,该内容可直接在开发者工具中获取。
cookie的获取
学习方向
始终爬点图片或者文本总是没什么意思.
学习方向是从基础部分提高,到爬虫框架,到手机 APP 爬虫,再到分布式爬虫,每个领域都需要投入精力去学习与研究。
多线程爬虫
- Python threading 模块;
- Python Queue 模块;
- Python multiprocessing 模块;
- Python asyncio 模块。
反爬
基础部分除了爬虫效率外,还需要了解常见的反爬手段。之前的课程只提及了最简单的反爬手段,UA 判断,除了它以外,常见的反爬方式如下。
- 验证码,需要掌握验证码识别技术;
- IP 限制,需要学习代理相关知识;
- 字体反爬,JS 加密,需要学习前端加密相关知识。
爬虫框架
在实际编码中 requests 只是最简单与最常用的爬虫库,在工作中还有 2 个常用爬虫框架需要掌握。
- scrapy
- pyspider
手机 APP 爬虫
本课程中所有实验都是针对 Web 端 PC 站点进行爬取,但这只是爬虫的一个方向。
随着移动互联网时代的兴起,手机 APP 爬取,也成为了爬虫工程师日常工作之一。
如何爬取手机 APP 内容,可以从下述内容开始学习。
- Fiddler 工具的使用;
- Charles 工具的使用;
- mitmproxy 与 mitmdump;
- Appium。