Spider(一)

1、网络爬虫
     1、定义 :网络蜘蛛、网络机器人,抓取网络数据的程序
     2、总结 :用Python程序去模仿人去访问网站,模仿的越像人越好
     3、爬取数据的目的 :通过有效的大量数据分析市场走势、公司决策

2、企业获取数据的方式
     1、公司自有数据
     2、第三方数据平台购买
     数据堂、贵阳大数据交易所
     3、爬虫爬取数据
     市场上没有或者价格太高,利用爬虫程序爬取

3、Python做爬虫优势
     请求模块、解析模块丰富成熟,强大的scrapy框架
     PHP :对多线程、异步支持不太好
     JAVA :代码笨重,代码量很大
     C/C++ :虽然效率高,但是代码成型很慢

4、爬虫分类
     1、通用网络爬虫(搜索引擎引用,需要遵守robots协议)
     http://www.taobao.com/robots.txt
     1、搜索引擎如何获取一个新网站的URL
           1、网站主动向搜索引擎提供(百度站长平台)
           2、和DNS服务网(万网)合作,快速收录新网站
     2、聚焦网络爬虫
     自己写的爬虫程序:面向主题的爬虫、面向需求的爬虫

5、爬取数据的步骤
     1、确定需要爬取的URL地址
     2、通过HTTP/HTTPS协议来获取相应的HTML页面
     3、提取HTML页面中有用的数据
     1、所需数据,保存
     2、页面中有其他的URL,继续 第2步

6、Anaconda和Spyder
     1、Anaconda :开源的Python发行版本
     2、Spyder :集成开发环境
     Spyder常用快捷键:
     1、注释/取消注释 :ctrl + 1
     2、保存 :ctrl + s
     3、运行程序 :F5
     4、自动补全 :Tab

7、Chrome浏览器插件
     1、安装步骤
     1、浏览器右上角 - 更多工具 - 扩展程序
     2、点开右上角 - 开发者模式(打开)
     3、把插件 拖拽到 浏览器页面,释放鼠标,点击 添加扩展...
     2、插件介绍
     1、Xpath Helper :网页数据解析插件
     2、JSON View    :查看json格式的数据(好看)
     3、Proxy SwitchOmega :代理切换插件

8、Fiddler抓包工具
   1、抓包工具设置
     1、Tools->options->HTTPS->...from browers only
     2、connections :设置端口号 8888
   2、设置浏览器代理
     Proxy SwitchOmega -> 选项 -> 新建情景模式 -> HTTP 127.0.0.1 8888 -> 应用选项

    浏览器右上角图标 -> AID1806 -> 访问百度

9、WEB
     1、HTTP和HTTS
     1、HTTP :端口80(默认)
     2、HTTPS :443,HTTP的升级版,加了一个安全套接层
     2、GET和POST
     1、GET :查询参数都会在URL地址上显示出来
     2、POST:查询参数和需要提交数据是隐藏在Form表单里的,不会再URL地址上显示
     3、URL :统一资源定位符
     https:// item.jd.com  :80/443      /11963238.html   #detail
     协议     域名/IP地址  端口(省略)  访问资源的路径   锚点(可省略)
     4、User-Agent
     记录用户的浏览器、操作系统等,为了让用户获取更好的HTML页面效果
     ex:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
     内核:
         Mozilla Firefox :(Gecko内核) -(自己的内核)
         IE :Trident(自己的内核)
         Linux : KTHML(like Gecko)
         Apple :Webkit(like KHTML)
         Google:Chrome(like Webkit)
         其他浏览器都是模仿IE/Chrome

10、爬虫请求模块
     1、版本
     1、python2 :urllib2、urllib
     2、python3 :把urllib和urllib2合并,urllib.request
     2、python3常用方法(url.request)
     1、urllib.request.urlopen("网址")
         1、作用 :向网站发起一个请求,并获取响应
             字节流 = response.read()
             字符串 = response.read().decode("utf-8")
             encode() : 字符串 --> bytes
             decode() : bytes  --> 字符串(解码)
         2、重构User-Agent
             1、不支持重构User-Agent:
                 urllib.request.urlopen()
             2、支持重构User-Agent:
                 urllib.request.Request(添加User-Agent)
     2、urllib.request.Request("url",headers={"User..})
         User-Agent是爬虫和反爬虫斗争的第一步,发送请求必须带User-Agent
         1、使用流程(见 02_urllib.request.Request.py)
             1、创建请求对象:利用Request()方法
             2、获取响应对象:利用urlopen(请求对象)
             3、获取响应内容:利用响应对象的read().decode("utf-8")获取内容
                     html=response.read().decode("utf-8")
         2、响应对象response的方法
             1、read() :读取服务器响应的内容(字节流)
             2、getcode()
                 作用:返回HTTP的响应码
                 print(respones.getcode())
                 200 :成功
                 4XX :服务器页面出错
                 5XX :服务器出错
             3、geturl()
                 作用:返回实际数据的URL(防止重定向问题)
                 print(respones.geturl())
     3、urllib.parse模块
     1、urllib.parse.urlencode("字典")
         编码前 :urlencode({"wd":"帅哥"})
         编码后 :wd=%e5%b8%85%e5%93%a5
         tedu = {"wd":"达内科技"}
         示例见 :04_urllib.parse.urlencode示例.py
             请输入你要搜索的内容:美女
             保存到本地文件 :美女.html
         注意:
             1、urlencode的参数一定要为 字典,得到的结果为 字符串
             2、with open("Baidu.html","w",encoding="utf-8") as f:
                    f.write(html)   # 保存到本地文件:百度.html
     2、urllib.parse.quote("字符串") 见 05_urllib.parse.quote示例.py
         1、http://www.baidu.com/s?wd=帅哥
         2、key = urllib.parse.quote("帅哥")
         key的值 :"%e8%a3%b4..."
     3、urllib.parse.unquote("字符串")
         s = "%d3%e8..."
         s = urllib.parse.unquote(s)
     4、练习
     百度贴吧数据抓取
     要求:
           1、输入要抓取的贴吧名称
           2、输入爬取的起始页和终止页
           3、把每一页的内容保存到本地
         第1页.html 第2页.html ... ...
     步骤:
           1、找URL规律,拼接URL
         第1页:http://tieba.baidu.com/f?kw=??&pn=0
         第2页:http://tieba.baidu.com/f?kw=??&pn=50
         第3页:http://tieba.baidu.com/f?kw=??&pn=100
         .....
         第n页:pn=(n-1)*50
           2、获取网页内容(发请求获响应)
           3、保存(本地文件、数据库)

11、请求方式及实例
    1、GET
     1、特点 :查询参数在URL地址中显示
     2、案例 :抓取百度贴吧
    2、POST(在Request方法中添加data参数)
     1、req = urllib.request.Request(url,data=data,headers=headers)
         data:表单数据以bytes类型提交,不能是string
     2、处理表单数据为bytes类型
         1、把Form表单数据定义为字典data
         2、urlencode(data)
         3、转为bytes数据类型 :bytes()
     3、案例 :有道翻译
         1、要求
         用户输入需要翻译的内容,把翻译的结果给输出来
         http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
     4、有道翻译返回的是json格式的字符串,如何把json格式的字符串转换为Python中字典
           import json
           s = '{"key":"value"}'
           s_dict = json.loads(s)

猜你喜欢

转载自www.cnblogs.com/py321/p/10012563.html