【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!!!
原文地址:https://www.cnblogs.com/limitCM/p/12257351.html