zoukankan      html  css  js  c++  java
  • 【2020/2/3】寒假自学——学习进度报告10

      放弃编译了,Spark连最基本的hive都不支持就当成hive被抛弃了吧。垃圾hadoop。


      虽然如此,但还是很头疼,这样一来只能把最基本的CVS文件当成数据库来使用,这样虽然也挺方便,但总归只是成为折中之举,或许在以后会有更好的解决方案,现在姑且如此。

      所以今天还是来写写所学内容。

      今天算是仔细学习了爬虫技术(多线程、分布式、爬虫框架这些方面暂时放一放),包括python的requests库、Beautiful Soup库、PhantomJS库、Selenium库以及一个相当方便的爬取、对元素和属性进行遍历的语言XPath。

      算上之前学习过的Urllib库,网页访问的库算是比较熟练了,相比于繁琐的Urllib3,requests可以说简洁优美而且相当适应于脚本,所以算是一个高级的库,不过如果想要追求最高的速率可能还是会去用Urllib3,因为requests还是调用了Urllib3。

      requests封装了http所有的基本请求方式。

    r = requests.post("http://httpbin.org/post")
    r = requests.put("http://httpbin.org/put")
    r = requests.delete("http://httpbin.org/delete")
    r = requests.head("http://httpbin.org/get")
    r = requests.options("http://httpbin.org/get")

      对于这些请求方式也有额外的参数来使用,就像传递post的数据:

    import requests
    
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post("http://httpbin.org/post", data=payload)
    print r.text

      上传文件:

    import requests
    
    url = 'http://httpbin.org/post'
    files = {'file': open('test.txt', 'rb')}
    r = requests.post(url, files=files)
    print r.text

      获取/发送cookies:

    import requests
    
    url = 'http://example.com'
    r = requests.get(url)
    print r.cookies
    print r.cookies['example_cookie_name']
    
    url = 'http://httpbin.org/cookies'
    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies)
    print r.text

      这些就是常见用法,另外还有保持session的操作比较实用。

      还有几个相当有用的库就是PhantomJS库、Selenium库,这两个库一起使用就可以完全自动化模拟用户行为,如果网页过于复杂提取不了API就可以尝试这种组合,PhantomJS能提供一个完整的页面渲染,使js中的数据操作也能够得到,Selenium能模拟用户操作,组合使用就可以完成高效的自动化用户行为。但代价是很慢,如果还是大批量的获取信息还是找数据比较踏实。

      

      XPath简直是爬虫的利器,简单明了而且功能也很丰富,对于我来说正则表达式和selector都相当苦手,但这个可以说很方便了。

      不过如果要全部写一遍就太麻烦了,记录几个相当有用的实例。

    选取 price 节点中的所有文本
    /bookstore/book/price/text()
    选取价格高于 35 的所有 price 节点
    /bookstore/book[price>35]/price
    选取 price 节点的所有后代元素(子、孙等)以及当前节点本身
    /bookstore/book/price/descendant-or-self
    选取所有后代元素(子、孙等)以及当前节点本身后显示文本
    /bookstore/book/price/descendant-or-self::text()

      text()函数只是XPath的一个函数,其余功能可以参考W3。

      另外记录一个有用的python函数translate() 和 其配合函数 maketrans() ,这个函数可以进行爬取后的数据的简单清洗,去除空格、替换字符什么的。

      

      translate() 方法语法:

    Python3中:

    1
    S.translate(table)

    Python2中:

    1
    S.translate(table[,delchars])

      具体使用时maktrans()可以生产参数所需的table。

      

    intab = "aeiou"
    outtab = "12345"
    deltab = "thw"
      
    trantab1 = str.maketrans(intab,outtab) # 创建字符映射转换表
    trantab2 = str.maketrans(intab,outtab,deltab) #创建字符映射转换表,并删除指定字符
      
    test = "this is string example....wow!!!"
      
    print(test.translate(trantab1))
    print(test.translate(trantab2))

      输出结果为

    th3s 3s str3ng 2x1mpl2....w4w!!!

    3s 3s sr3ng 2x1mpl2....4!!!
  • 相关阅读:
    确定查询各阶段消耗的时间
    mysql 处理查询请求过程
    如何获取有性能问题的SQL
    索引优化策略
    CXF支持 SOAP1.1 SOAP1.2协议
    MYSQL 基于GTID的复制
    poj2056
    poj2049
    poj1033
    poj1221
  • 原文地址:https://www.cnblogs.com/limitCM/p/12257351.html
Copyright © 2011-2022 走看看