python爬虫基本概念:
写爬虫必须弄懂的问题:
-从输入网址到看到网页,都反生了什么?
URL的概念
- 统一资源定位符:Uniform Resource Locator
- 组成:协议 域名
- urllib是一个py分析url相关的工具
- ipython是一个python命令行工具
- 使用tab 和 ? 可以很方便使用python命令
- requests是一个py请求工具
- r = requests.get(‘http://www.baidu.com’)
- r.text得到文字 r.content得到二进制数据 r.encoding得到编码
- chardet.detect(r.content)
- r.contetn.decode(‘utf-8’)
- gb2312<gbk<gn18030
- gbk保含gb2312,可以替换
- pip 国内镜像pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
- pip install cchardet
cchardet.detect(‘科技健康的点点滴滴’.encode(‘gbk’))
建议使用cchardet 取代 chardet ,因为前者更准确
HTTP 请求
- 主要方法 : get post … 6种
写爬虫的一般步骤
- 浏览器打开要抓取的网站
- 推荐Chrome浏览器
- F12开发者工具
- 查看源代码,是否包含想要的数据
- 包含,则通过request得到源码
- 不包含,则看下一步
- 检查ajax请求
寻找需要的数据
爬虫的基本操作
- 抓取 -> 存储HTML(压缩)
- 网页
- ajax
- 提取
- 存储
HTTP请求库
- urllib.request
- request
- r.test: str , chardet,headers->encoding
- r.content: bytes cchardet.detect(r.content)
- r.json
- cchardet 编码
- aiohttp:异步IO 做http请求,协程并发请求
- selenium自动化测试工具
- webdirver.Chrome()
- chrome headless
提取数据的库
- re 正则表达式
- lxml(Beautiful Soup) 基于C语言
- xpath()
爬虫进阶
- 用Chrome断点调试JavaScript
- 用Charles , Fiddle 抓包分析
如何发现ajax加载的URL
- F12 network
- 返回结果 HTML xml json
瀑布流网页的抓取
- 表现是瀑布流 底层是ajax
- 网页滚动到底部触发ajax异步请求新数据
js解密
- 打开网页加载的js
- 压缩 混淆 打包
- 晦涩难懂 pretty格式 变量 函数名 难懂
- 找到js加密/解密算法的代码
- Charles抓包分析
- 例子:https://www.yuanrenxue.com/crawler/get-login-cookies-charles-weibo.html
- Chrome调试JavaScript
- 例子:translate.google.cn
- Charles抓包分析
对付JavaScript的万能钥匙
- Python Selenium 模块
- Chrome有界面
- Chrome Headless
- Chrome的运行效率慢
- 没有request等库快 但开发速度快
- 不用费劲理解JavaScript代码
- 不用使用python重写JavaScript
- 针对单一复杂网站,建议Chrome
- 很难绕开该网站ip ,账号限流
- 对于多个普通网站,使用requests
- 这些网站几乎没有限制
- 没有request等库快 但开发速度快