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 
    
原文地址:https://www.cnblogs.com/Skyda/p/10056689.html