前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫知识回顾

python爬虫知识回顾

作者头像
热心的社会主义接班人
发布2018-10-22 15:20:35
3990
发布2018-10-22 15:20:35
举报
文章被收录于专栏:cscs

又要重新开始python的道路了,争取快些找回感觉啊。近来一直java,jsp,ssh,db。

最常用的requests库, 通过requests对象的get方法,获取一个response对象。jsp的东西。

image.png

image.png

image.png

其中timeout,proxies,headers,cookies,verify,是我用到过的东西。

response对象的方法和属性 text属性,属于字符流,获取文字。 content属性,二进制,获取图片,文件等

hashlib 摘要算法简介 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。如果有人篡改了你的文章,并发表为'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因为根据'how to use python hashlib - by Bob'计算出的摘要不同于原始文章的摘要。

可见,摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

代码语言:javascript
复制
def get_MD5(st="alice"):
    md5=hashlib.md5()
    md5.update(st.encode(encoding="utf-8"))
    print(md5.hexdigest())
    
get_MD5()

代理和头部处理

代码语言:javascript
复制
def get_html(url):
   headers = {'Accept': '*/*',
               'Accept-Language': 'en-US,en;q=0.8',
               'Cache-Control': 'max-age=0',
               'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
               'Connection': 'keep-alive',
               'Referer': 'http://www.baidu.com/'
               }
    proxy = [
        {'https': 'http://yx827w:yx827w@123.249.47.2:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.3:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.4:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.5:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.6:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.7:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.8:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.9:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.10:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.11:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.13:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.14:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.15:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.16:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.17:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.18:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.19:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.20:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.21:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.22:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.23:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.24:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.25:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.26:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.27:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.28:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.29:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.30:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.31:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.32:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.33:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.34:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.35:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.36:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.37:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.38:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.39:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.40:888'},
        {'https': 'http://yx827w:yx827w@123.249.47.41:888'},
    ]
    pro=random.choice(proxy)
    print(type(pro))
    print(pro)
    res=requests.get(url,headers=head,proxies=pro)
    html=res.text //返回字符串。
    print(html)
    return html

xpath技术 1.0 使用etree的HTML方法获取数据,返回的是一个节点对象

代码语言:javascript
复制
from lxml import etree
html=get_html("https://blog.csdn.net/u014595019/article/details/51884529")
print(html)
page=etree.HTML(html)
print(type(page),page)
xp='//*[@id="mainBox"]/main/div[1]/div/div/div[2]/div[1]/span[2]'
readnum=page.xpath(xp)

for a in readnum:
    print(a.attrib)
    print(a.text)
    print(a.get("class"))

结果如下

代码语言:javascript
复制
<class 'lxml.etree._Element'> <Element html at 0x47a7288>
{'class': 'read-count'}
阅读数:40927
read-count

参考文献 摘要算法简介 学习lxml解析html两小时后总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.10.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结果如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档