bytes:二进制(互联网上数据都是以二进制的方式传输的)
str:unicode编码的呈现形式,常用的实现方式是UTF-8
str转换为bytes的方法:encode()
bytes转换为str的方法:decode()
HTTP:超文本传输协议,默认端口号80,性能更好
HTTPS:HTTP+SSL(安全套接字层),默认端口号443,安全性更好
爬虫是模拟浏览器发送请求,获取响应
url-->发送请求-->获取响应-->提取url-->提取数据-->保存
scheme:协议(http,https,ftp)
host:服务器的IP地址或者域名(www.baidu.com)
port:服务器的端口(80或者443)
path:访问资源的路径,百度搜索爬虫(/s?wd=爬虫&rsv_spt=1&rsv_iqid=0x8d278b16000116e5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=9&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&inputT=1138&rsv_sug4=2397)
query-string:参数,发送给http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)
完整的url例子:
https://www.baidu.com/s?wd=爬虫&rsv_spt=1&rsv_iqid=0x8d278b16000116e5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=9&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&inputT=1138&rsv_sug4=2397
打开F12,点击Network,在ALL列表找到访问的Host,查看request-Headers。
Host:主机和端口号
connection:链接类型
Upgrade-Insecure-Requests:一般为1,升级为HTTPS请求
User-Agent:浏览器名称,需要模拟这个
Accept:多个传输文件类型
Accept-Encoding:文件编解码格式
Accept-Language:支持的语言类型
200:成功
302or307:临时转移至新的url
404:相应失败
500:服务器内部错误
1、爬虫是什么:
抓取网页数据的程序。
2、爬虫怎么抓取网页数据:
网页都有自己唯一的URL(统一资源定位符)来进行定位。
网页都是用html(超文本标记语言)来描述页面信息。
网页都是使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。
①、首先确定需要爬取的网页URL地址。
②、通过HTTP/HTTPS协议来获取对应的HTML页
③、提取HTML页面里面有用的数据(反复精练处理数据得到目标数据)。
3、如何抓取HTML页面:
①、HTTP请求的处理,urllib、urllib2、requests
②、处理后的请求可以模拟浏览器发送请求、获取服务器响应的文件。
③、解析服务器相应的内容:re,xpath、jsonpath、pyquery等。
使用某一种描述性来给我们需要的数据定义一个匹配规则,
符合这个规则的数据就会被匹配。比如常用的re,正则表达式。
④、如何采集动态HTML、验证码的处理。
通常的动态页面采集:Selenium+PhantomJS(无界面):模拟真实浏览器加载js等非静态数据。
机器学习库,机器图像识别系统:Tesseract,可以处理简单的验证码,复杂的交给打码平台
⑤、Scrapy框架:(Scrapy,Pyspider)
高定制性、高性能(异步网络框架twisted):速度下载快,提供数据存储,数据下载,提取规则等组件。
⑥、分布式策略:scrapy-redis,以Redis数据库为核心的一套组件
让Scrapy框架支持分布式的功能,主要在Redis里做请求指纹去重、请求分配、数据临时存储。
⑦、爬虫-反爬虫-反反爬虫:爬虫最难的就是网站另一边的反爬虫人员。
User-Agent、代理、验证码、动态数据加载、加密数据等。
数据价值是否值得费劲做爬虫,机器成本+人力成本>数据价值,一般能爬出来。