zoukankan      html  css  js  c++  java
  • spider _其他库的简单操作与方法

    PHP : 网络IO
    java : 代码笨重,代码量很大
    C/C++ :虽然效率高,但是代码成型很慢
    
    1 通用网络爬虫(搜索引擎引用,需要遵守robots协议)
        1 搜索引擎如何获取一个新网站的 URL
            1 网站主动向搜索提供(百度站长平台)
            2 和dns服务商(万网)合作,快速收录新网站
    2 聚焦网络爬虫
        自己写的爬虫程序:面向需求的爬虫
    3 爬取数据的步骤
        1 确定要爬取的URL地址
        2 通过HTTP/HTTPS协议获取相应的HTML页面
        3 提取HTML页面中有用的数据
            1 所需数据,保存
            2 页面中有其他的URL,继续第2步
        
    1 Spyder常用快捷键
        1 注释/取消注释  crtl+1
        2 运行f5
        3 自动实例:Tab
    ====
    9 爬虫请求模块 
        1 版本
            1 python2 :urllib2 urllib
            2 python3 :urllib.request
        2 常用方法
            1 urllib.request.urlopen()
                1 作用:向网站发起请求,并获取响应
                    方法:  read()     #读取响应内容(字节流)    
                            getcode() #响应码
                            geturl() #返回实际响应的url
                2 响应对象res的方法
            2 urllib.parse模块
                urllib.parse.urlencode({字典})
                编码前:{'wd':'中文'}
                编码后:'wd=%ex%x'
            3 urllib.parse.quote('字符串')
                编码前:('中文')
                编码后:'%ex%x'
            4 urllib.parse.uquote('待解码字符串')
    2 POST(在Request方法中添加data参数)
        1 req = urllib.request.Request(url,data=data,headers = headers)
            data : 表单数据以bytes类型提交,不能是string
        2 如何把json格式的字符串转换为python
            s = '{"key":"value"}'
            s_dict = json.loads(s)
    
    4 知识点
        1 csv模块的使用流程
            a = csv.writer(文件句柄)
            a.writerow(列表元素)
    5 requests 常用方法
        1 get(url,headers = headers)
            发起请求,并获取响应对象
            res = get()
            res.encoding 查看编码
                如果编码问题,可以指定
                res.encoding = 'utf-8'
            res.text      查看响应内容
            res.content  查看字节集
            res.status_code 查看响应状态码
            res.url      查看实际数据的url
            
            使用场景
                1 没有查询参数
                    res = requests.get(url,headers= headers)
                2 有查询参数(params)
                    res = requests.get(url,params=params,headers=headers)
                    params:查询参数,字典不用编码,也不用拼接URL
                
            1 代理IP(参数名:proxies)
                requests.get(url=url,headers=headers,proxies={'http':'http://58.53.128.83:3128'})
                1 普通代理
                    格式:proxies={'协议':"协议://ip地址:端口"}
                2 私密代理
                    格式 proxies={'协议':"协议://用户名:密码@ip地址:端口号"}
        2 响应对象res的属性
            1 encoding:响应字符编码,res
    
        3 post(url,data = data ,headers=headers)
            data要求是字典
        4 SSL证书认证(参数名:verify = True | False)
                1 verify = True :默认,进行SSL证书认证
                2 verify = False:不做认证
    4 urllib.request中Handler处理器
        1 定义
            自定义的urlopen()方法,因为模块自带的urlopen不支持代理等功能,通过Handler处理器自定义urlopen方法
            功能:通过Handler自理器自定义urlopen方法
        2 常用方法
            1 opener = build_opener(某种功能Handler处理器对象)
            2 opener.open(url)
        3 使用流程
            1创建相关的Handler处理器对象
            2 创建自定义opener对象
            3 利用opener对象的open方法发请求获响应
        4 Handler处理器分类
            1 HTTPH遥():没有特殊功能
            2 ProxyHandler({普通代理})
                代理格式:{'':''}
            3 ProxyBasicAuthHandler(密码管理器对象)
            4 HTTPBasicAuthHandler(密码管理器对象)
        5 密码管理器用途
            1 私密代理
            2 Web客户端认证
            3 程序实现流程
                1 创建密码管理对象
                    pwdmg = urllib.request.HTTPPasswordMgWithDefaultRealm()
                2 把认证信息添加到对象里面去
                    pwdmg.add_password(None,Webserver, user,password)
                3 创建Handler处理器对象
                    proxy_handler = urllib.request.BasicAuthHandler()
                4 创建自定义opener过对象
                    opener = urllib.request.build_opener(proxy_handler)
                5 利用opener对象的open方法发请求获响应
                    req = urllib.request.Request(url,headers=headers)
                    res = open.open(req)
    =================
    1 xpath 工具(解析)
        1 Xpath
            在XML文档中查找信息的语言,同样适用于HTML文档检索
        2 Xpath辅助工具
            1 Chrome插件: xpath Helper 
                打开/关闭 ,ctrl+shift+x
            2 Firfox插件:Xpath checker
            3 Xpath表达式编辑工具:XML Quire
            
        3 选取节点
            /:从根节点开始选取
            //:从整个文档中查找节点
            @ :选取某个节点的属性
            | :异或
            函数:contains()
                匹配1个属性值
                ex:
                div[contains(@属性,包含属性值)]
    2 LXML库及xpath使用
        1 导入模块 :from lxml import etree
        2 创建解析对象:parseHtml = etree.HTML(htmlResponser)
        3 调用xpath
            r_list = parseHtml.xpath('xpath语句')
        4 如何获取节点对象的文本内容
            节点对象名.text
    3 selenium+phantomjs 强大的组合
         1 特点
            1 可以运行在浏览器,根据指定命令操作浏览器,让浏览器自动加载界面
            2 只是工具,不支持浏览器功能,需要与第三方浏览器结合使用
            3 安装
                python -m pip install selenium
         2 phantomjs    
            1 定义 : 无界面浏览器
            2 特点 : 
                1 把网站加载到内存进行页面加载
                2 运行高效
            3 安装
                1 windows (PhantomJS)
                    1 将下载的可执行文件放到python安装目录的Scripts目录下(都需要放到python/.../Scripts目录下)
                2 windows(Chromedriver.exe)
                    https://chromedriver.storage.googleapis.com/index.html
                    下载和自己的浏览器相对应的版本
                        注意:Chromedriver设置无界面模式
                        1 opt = webdriver.ChromeOptions()
                        2 opt.set_headless()[此方法没有的话,请查看下面的代码进行更换]
                          opt.add_argument('windows-size=1900*3000') #设置分辨率
                                opt:对象中可添加各种功能
                                    比如说:无界面,浏览器分辨率
                                    opt.set_headless()
                                    opt.add_argument('windows-size=1900*3000')
                        3 driver = webdriver.Chrome(options=opt)
                        4 driver.execute_script('windows.scrollTo(0,document.body.scrollHeight)')  #拉到底部
                        
                        
            4 命令
                driver.page_source.find('字符串')    
                    成功返回非 -1
                    失败返回 -1
                3 单元素查找,类型为对象,利用对象名.text属性获取文本内容
                4 对象名.send_keys('内容')
                5 对象名.click()
                            from selenium import webdriver
                            from selenium.webdriver.chrome.options import Options
                            chrome_options = Options()
    
                            chrome_options.add_argument('--no-sandbox')#解决DevToolsActivePort文件不存在的报错
    
                            chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
                            chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
                            chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
                            chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
                            chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
                            chrome_options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe" #手动指定使用的浏览器位置        
    2 多线程爬虫
        1 进程
            1 系统中正在运行的一个应用程序
            2 1个cpu核心1 次只能执行1 个进程,其他进程都属于非运行状态
            3 N个CPU核心可同时执行N个任务
        2 线程
            1 进程中包含的执行单元,1个进程可包含多个线程
            2 线程可使用所属进程空间(1次只能执行1个线程)
        3 GIL:全局解释锁
            执行通行证,仅此1个,谁拿到了通行证谁执行,否则等
        4 应用场景
            1 多进程:大量的密集计算
            2 多线程:I/O操作密集
                爬虫:网络I/O密集
                写文件:本地磁盘I/O
                
            3 put()
             get()
            Queue.empty():是否为空
            Queue.join():如果队列为空,执行其他程序
    
    1 Beautifulsoup解析
        1 定义 :HTML或XML的解析器,依赖于lxml
        2 安装 :python -m install beautifulsoup4
        3 使用流程    
            1 导模块 :from bas import Beautifulsoup
            2 创建解析对象
                soup = BeautifulSoup(html,'lxml')
            3 查找节点对象
                soup.find_all('div',attrs={"class":"test"})
        5 BeautifulSoup支持的解析库
            1 lxml :soup = BeautifulSoup(html,'lxml')
                速度快,文档容错能力强
            2 html.parser :Python标准库
                都一般
            3 xml : 
                速度快,文档容错能力强
        6 节点选择器
            1 选择节点并获取内容
                节点对象.节点名.string
        7 find_all(): 返回列表
            r_list = soup.find_all("节点名",attrs={"":""})
            
    scrapy
        1 定义:
            异步处理框架,可配置和可扩展程度非常高,python上使用最广泛的爬虫框架
        2 安装(Ubuntu)
            1 安装依赖库
        3 
        
  • 相关阅读:
    php 魔鬼训练
    php 验证码
    php 经典分页(推荐和laypage配合)
    php 过时的sql操作库(学习使用)
    php 上传图片
    npm 国内淘宝镜像cnpm、设置淘宝源
    gulp + webpack + sass 学习
    关于分页的解决方案收集
    SVN的学习和安装
    使用和学习 ES2015
  • 原文地址:https://www.cnblogs.com/Skyda/p/10056689.html
Copyright © 2011-2022 走看看