⑴ 如何利用python 爬取知乎上面的数据
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Administrator
# @Date: 2015-10-31 15:45:27
# @Last Modified by: Administrator
# @Last Modified time: 2015-11-23 16:57:31
import requests
import sys
import json
import re
reload(sys)
sys.setdefaultencoding('utf-8')
#获取到匹配字符的字符串
def find(pattern,test):
finder = re.search(pattern, test)
start = finder.start()
end = finder.end()
return test[start:end-1]
cookies = {
'_ga':'GA1.2.10sdfsdfsdf', '_za':'8d570b05-b0b1-4c96-a441-faddff34',
'q_c1':'23ddd234234',
'_xsrf':'234id':'"ZTE3NWY2ZTsdfsdfsdfWM2YzYxZmE=|1446435757|"',
'z_c0':'"=|14464e234767|"',
'__utmt':'1', '__utma':'51854390.109883802f8.1417518721.1447917637.144c7922009.4',
'__utmb':'518542340.4.10.1447922009', '__utmc':'51123390', '__utmz':'5185435454sdf06.1.1.utmcsr=hu.com|utmcgcn=(referral)|utmcmd=referral|utmcct=/',
'__utmv':'51854340.1d200-1|2=registration_date=2028=1^3=entry_date=201330318=1'}
headers = {'user-agent':
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',
'referer':'http://www.hu.com/question/following',
'host':'www.hu.com','Origin':'http://www.hu.com',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Connection':'keep-alive','X-Requested-With':'XMLHttpRequest','Content-Length':'81',
'Accept-Encoding':'gzip,deflate','Accept-Language':'zh-CN,zh;q=0.8','Connection':'keep-alive'
}
#多次访问之后,其实一加载时加载20个问题,具体参数传输就是offset,以20递增
dicc = {"offset":60}
n=20
b=0
# 与爬取图片相同的是,往下拉的时候也会发送http请求返回json数据,但是不同的是,像模拟登录首页不同的是除了
# 发送form表单的那些东西后,知乎是拒绝了我的请求了,刚开始以为是headers上的拦截,往headers添加浏览器
# 访问是的headers那些信息添加上,发现还是拒绝访问。
#想了一下,应该是cookie原因。这个加载的请求和模拟登录首页不同
#所以补上其他的cookies信息,再次请求,请求成功。
for x in xrange(20,460,20):
n = n+20
b = b+20
dicc['offset'] = x
formdata = {'method':'next','params':'{"offset":20}','_xsrf':''}
#传输需要json串,和python的字典是有区别的,需要转换
formdata['params'] = json.mps(dicc)
# print json.mps(dicc)
# print dicc
circle = requests.post("http://www.hu.com/node/ProfileFollowedQuestionsV2",
cookies=cookies,data=formdata,headers=headers)
#response内容 其实爬过一次之后就大同小异了。 都是
#问题返回的json串格式
# {"r":0,
# "msg": ["<div class=\"zm-profile-section-item zg-clear\">\n
# <span class=\"zm-profile-vote-count\">\n<div class=\"zm-profile-vote-num\">205K<\/div>\n
# <div class=\"zm-profile-vote-type\">\u6d4f\u89c8<\/div>\n
# <\/span>\n<div class=\"zm-profile-section-main\">\n
# <h2 class=\"zm-profile-question\">\n
# <a class=\"question_link\" target=\"_blank\" href=\"\/question\/21719532\">
# \u4ec0\u4e48\u4fc3\u4f7f\u4f60\u8d70\u4e0a\u72ec\u7acb\u5f00\u53d1\u8005\u4e4b\u8def\uff1f<\/a>\n
# <\/h2>\n<div class=\"meta zg-gray\">\n<a data-follow=\"q:link\" class=\"follow-link zg-unfollow meta-item\"
# href=\"javascript:;\" id=\"sfb-868760\">
# <i class=\"z-icon-follow\"><\/i>\u53d6\u6d88\u5173\u6ce8<\/a>\n<span class=\"zg-bull\">•<\/span>\n63 \u4e2a\u56de\u7b54\n<span class=\"zg-bull\">•<\/span>\n3589 \u4eba\u5173\u6ce8\n<\/div>\n<\/div>\n<\/div>",
# "<div class=\"zm-profile-section-item zg-clear\">\n
# <span class=\"zm-profile-vote-count\">\n
# <div class=\"zm-profile-vote-num\">157K<\/div>\n
# <div class=\"zm-profile-vote-type\">\u6d4f\u89c8<\/div>\n
# <\/span>\n<div class=\"zm-profile-section-main\">\n
# <h2 class=\"zm-profile-question\">\n
# <a class=\"question_link\" target=\"_blank\" href=\"\/question\/31764065\">
# \u672c\u79d1\u6e23\u6821\u7684\u5b66\u751f\u5982\u4f55\u8fdb\u5165\u7f8e\u5e1d\u725b\u6821\u8bfbPhD\uff1f<\/a>\n
# <\/h2>\n<div class=\"meta zg-gray\">\n
# <a data-follow=\"q:link\" class=\"follow-link zg-unfollow meta-item\" href=\"javascript:;\" id=\"sfb-4904877\">
# <i class=\"z-icon-follow\"><\/i>\u53d6\u6d88\u5173\u6ce8<\/a>\n<span class=\"zg-bull\">•
# <\/span>\n112 \u4e2a\u56de\u7b54\n<span class=\"zg-bull\">•<\/span>\n1582 \u4eba\u5173\u6ce8\n
# <\/div>\n<\/div>\n<\/div>"]}
# print circle.content
#同样json串需要自己 转换成字典后使用
jsondict = json.loads(circle.text)
msgstr = jsondict['msg']
# print len(msgstr)
#根据自己所需要的提取信息规则写出正则表达式
pattern = 'question\/.*?/a>'
try:
for y in xrange(0,20):
wholequestion = find(pattern, msgstr[y])
pattern2 = '>.*?<'
finalquestion = find(pattern2, wholequestion).replace('>','')
print str(b+y)+" "+finalquestion
#当问题已经访问完后再传参数 抛出异常 此时退出循环
except Exception, e:
print "全部%s个问题" %(b+y)
break
⑵ python怎么成为高手 知乎
我个人比较推崇limodou. 谦虚, 有实力, 爱分享, 这些标签让李大哥在Python界口碑一直很好, 另外, 他的ulipad, 一直是很多python初学者最喜欢用的编辑器. Uliweb也是很优秀的web框架 国内还有很多人,
一:知己知彼百战百胜,先要知道所有英雄的技能出招套路, 才能做出相应的反击,或者说躲开技能
二:多看大地图看到有人消失了,如果是自己对线的就说mis,否则在没有眼的情况下多多猥琐(回家的第一件事情就是买眼其他都没这个重要)
三:打游戏也是靠心理战的,不要被对面的英雄勾引,比如,一个残血的英雄上来故意和你打,明显是有队友在草丛等你过去。
四:多看看对面英雄玩的好的是怎么玩的先学着,当自己有一定经验的时候再想着改进
五:学会算伤害,大概自己一套伤害能照成多少伤害,加上追击(自己腿长的时候)能带走么?
如果不能带走对面的伤害能带走我么?还有两个英雄换血的时候自己划算么?
六:多多思考,不能因为被杀几次就生气,科学研究发怒会降低百分之四十的智商。
七:玩游戏就是比智商比猥琐比计算比经验光是学别人的做法你能成为高手,但是永远无法超越你学的那个人,所以自己独立思想是很重要的
八:看开点游戏就是游戏而已,生活中成为高手才是最重要的朋友
加我1909874734QQ,影流的一起好了,我技术还可以,一起练意识
多多练习,意志顽强
练好基本功补刀(冰女 CM 练习中路补刀10分钟内正反补失误少于5个 你就可以不用练了)了解每一个英雄的技能(你要真吃苦就把数据也背下来吧) 熟知小技巧比如控制兵线 拉兵线换位等(有视频教学 优酷薯仔自己搜)
看大神rep用处其实不大 因为可能你们相差太大 不用去侍汪模仿 你去和比你实力高的大 不要高太多 打完每次看自己的REP 不仅看自己的失误 也要看场上打的最好的怎么打的 最主要是要看场上局势比如说Gank的进攻
还有一点就是记住随时关注小地图 红点只有4个的时候就要注意一点了 而只有三个的时候就要猥琐了 只有两个的时候直接缩塔下随时准备撤退 或者直接回到安全的二塔
学会看F点 每两分钟刷一次
有了补刀就有了钱 经常看rep就容易有意识 关注小地图不容易死 经常看F就会有爆发
有了钱 有了意识 又很少死 还有爆发 你如果还不能成为高手就该死了 当然 操作是练出来的 操作只说一点 学会使用改建 最方便的改建 技能我没改过 但是物品栏我倒是从来都用改建的 还有一些绕树林 吃树过树林的小技巧就需要自己去找了
先熟悉各路英雄的技能,然后熟悉各种准备的作用,然后的思考一个准备会给不同的英雄带来什么样的不一样和提高,然后就是针对敌我英雄的不同技能和优势劣势,出相应的装备,来克制敌人,把自己的优势发挥到极致。 当然,首先是自己的基础,打钱的能力。 其次是自己的和队友的团队意识,不怕有神一样的对手,就怕有猪一样的队友,这话在理。 dota 是个团队游戏。一个人永远拯救不了世界。 嘿嘿,加油啊~
进入游戏时按esc找到设置 键盘键位 将跳跃空格备份为鼠标上滚轮 蹲为下滚轮 这样之后你去网络一下狗跳MCJ等身法 这样每次团战时食指按住鼠标左边中指放在滚轮上 无名指放在鼠标右边 多练习 有节奏感 这样身法就成了 想练好AK AWP 前提是要有意识 每次游戏时 注意看雷达 哪里死了队友哪里丢了包 之类 最最重要一点 鼠标位置尽量放高在头部的位置 这样看见敌人就爆头拉· 劝楼主创个小号 或到5173 买个180天的AWP 很便宜的 几块钱 在新手频道里 玩团队练练身法找找节奏 眼睛始终盯着屏幕 死了人就看看雷达 多培养培养意识 玩狙击时尽量把鼠标压低一点 CS最碉堡之处在于AWP跳起来也打得准 楼主多练习 每天先玩几局极限模式找找跳跃身法节奏 在去玩几把团队 多看看网上 SK 竞技什老毁仔么的视频 在手感上来的情况下玩几把生化 注意 玩生化是为了培养你 爆头的精准度 只打僵尸头部 在以上情况下 在试试玩竞技 一天也就4个多小时左右 楼主注意多锻炼 祝楼主早日余脊成为高手~ 纯手打!
勤练习,此外别无他法
打虚拟练实在不推荐,因为虚拟都是 *** 护甲的,而前期的虚拟反应超慢,打起来一点感觉都没有,到了后期又跟开了挂似的……极限模式、生化大逃杀练跑步的有什么用……
还是建议打团战竞技。新手的话打团战,对自己的技术自信了就去竞技。团战竞技的技能是CSOL等FPS游戏的基础,没了这些其他模式也玩不好
其他生化、灾变模式主要靠好枪,不过同样不能不练技术
打的时间久了强=就成高手了 但是不好好训练拉枪 急停 各种身位等的话 你能成为高手 但是成不了大神
其实很多人到了这个层面都差不多是这个样子了 包括我自己 我现在也是白4阶段,一直打不上去,我钻石的朋友都跟我说了很多 总结下来就这么几点 我和你分享下
1:当你打到一个点 感觉不行的时候 选择其他的位置去尝试下,比方说你是打野位打到瓶颈了 你去尝试打打中单上单 相信到了白金分段,不时关注其他路的走势 应该是会判断了。尤其是野区,白金段的打野 应该会懂得在什么位置放眼了 那你打上单的时候就应该学会判断是否去支援打野。也许你说上单 我去支援打野了 那兵线怎么办?如果少吃2波兵 但是你拿到一个人头,我相信也不是很亏
2:打的时候不要想太多,除了计算伤害 和时间以外 别去想其他的东西,如果你还要想 我上了 是不是会被别人打死的话 那你心态上就输对面了。
3:操作和意识这个东西是日积月累的。不要经常去打低分局 这样会拉低你自己的水平,因为低端局对手出错的几率太多 但是高端局没有那么多的失误 一旦失误那都是致命的
4:学会判断局势,办人时要选择怎么样的阵容,是被针对 是否被针对,进入游戏后 开局怎么打?后期什么时候该开团 什么时候该上 都要果断。开团的时候注意提示下队伍的人 否则出现断层 就是团战的失败。
5:打的时候自己保持平稳心 不要因为前期被压制 或者送了几个头就心浮气躁。一旦这样 你就输了。
6:每打完一局 好好反思比赛的过程,什么时候出错了 什么时候上的正好,然后想想 以后再遇到这样的阵容时该怎么打。
差不多这样吧 我钻石的朋友告诉我的。你可以参考下。
⑶ 如何使用python爬取知乎数据并做简单分析
一、使用的技术栈:
爬虫:python27 +requests+json+bs4+time
分析工具: ELK套件
开发工具:pycharm
数据成果简单的可视化分析
1.性别分布
0 绿色代表的是男性 ^ . ^
1 代表的是女性
-1 性别不确定
可见知乎的用户男性颇多。
二、粉丝最多的top30
粉丝最多的前三十名:依次是张佳玮、李开复、黄继新等等,去知乎上查这些人,也差不多这个排名,说明爬取的数据具有一定的说服力。
三、写文章最多的top30
四、爬虫架构
爬虫架构图如下:
说明:
选择一个活跃的用户(比如李开复)的url作为入口url.并将已爬取的url存在set中。
抓取内容,并解析该用户的关注的用户的列表url,添加这些url到另一个set中,并用已爬取的url作为过滤。
解析该用户的个人信息,并存取到本地磁盘。
logstash取实时的获取本地磁盘的用户数据,并给elsticsearchkibana和elasticsearch配合,将数据转换成用户友好的可视化图形。
五、编码
爬取一个url:
解析内容:
存本地文件:
代码说明:
* 需要修改获取requests请求头的authorization。
* 需要修改你的文件存储路径。
源码下载:点击这里,记得star哦!https : // github . com/forezp/ZhihuSpiderMan六、如何获取authorization
打开chorme,打开https : // www. hu .com/,
登陆,首页随便找个用户,进入他的个人主页,F12(或鼠标右键,点检查)七、可改进的地方
可增加线程池,提高爬虫效率
存储url的时候我才用的set(),并且采用缓存策略,最多只存2000个url,防止内存不够,其实可以存在redis中。
存储爬取后的用户我说采取的是本地文件的方式,更好的方式应该是存在mongodb中。
对爬取的用户应该有一个信息的过滤,比如用户的粉丝数需要大与100或者参与话题数大于10等才存储。防止抓取了过多的僵尸用户。
八、关于ELK套件
关于elk的套件安装就不讨论了,具体见官网就行了。网站:https : // www . elastic . co/另外logstash的配置文件如下:
从爬取的用户数据可分析的地方很多,比如地域、学历、年龄等等,我就不一一列举了。另外,我觉得爬虫是一件非常有意思的事情,在这个内容消费升级的年代,如何在广阔的互联网的数据海洋中挖掘有价值的数据,是一件值得思考和需不断践行的事情。
⑷ 学python能干嘛知乎
学python能干嘛如下:
1、Python web开发。学完Python可以做web开发,因为现在中国学习Python的比较少,而招聘Python的却非常的多。所以Python web是一个非常的选择方向。
2、运维。很多人运维还没有学习Python,但是Python给运维带来的价值非常的大,很多时候我都觉得这些还没有学习Python的人早晚都要被淘汰。
6、Python是依托人工智能慢慢升温的,但是Python不仅可以从事人工智能方面的工作,同时可以从事全栈工程师、爬虫、数据分析、机器学习、爬虫等,需求量都是非常高的,所以对于学员来说,学习Python之后机会岗位是非常广泛的。
⑸ 如何阅读python官方文档 知乎
直接在shell中输入Python进入交互模式:
[root@bogon test]$ python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "right", "credits" or "license" for more information.
使用dir函数式可以查看对象的属性,以dict类型为例,在命令窗口输入 dir(dict) 即可查看dict的属性,如下所示:
dir(dict)
查看对象的某个属性还可以用help函数,使用方法如下所示:
help(dict.items)
利用__doc__方法(注意此处为双下划线),如要查看dict的update方法:
print(dict.update.__doc__)
⑹ python好学吗 知乎
首先,对于初学者来说学习Python是不错的选择,一方面Python语言的语法比较简单易学,另一方面Python的实验环境也比较容易搭建。
学习编程是一定需要老师的,我不信谁能无师自通把Python学得多好。至少着急就业的人肯定不会,没人指导很难学成。那么学习Python编程语言难吗?其实学Python不难,比起C语言、C#、 C+ +和JAVA这些编程语言相对容易很多。学习Python编程语言,动手实践是一件非常愉快的事情。
下面给新手学习Python一些建议:
1、先买一本自学用的Python书籍,不要看电子书。
2、对Python基础数据类型有个了解。
3、学会各种类型的操作方法。
4、了解函数和类的概念。
5、动手实践,找小项目练习。
如果你决定了要学习Python技术,就是为了以后能有个高薪工作,而且你对自己学习Python还很自信,建议参加专业的学习。因为你对于工作的迫切需求,你肯定不会像大学那样贪玩不学习,你会极其认真。
⑺ 如何系统地自学Python_如何系统地自学Python知乎
学习可以按照以下路线进行:
阶段一:Python开发基础
Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。
阶段二:Python高级编程和数据库开发
Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket网络编程、线程、进程、队列、IO多路模型、Mysql数据库开发等。
阶段三:前端开发
Python全栈开发与人工智能之前端开发知识学习内容包括:Html、CSS、JavaScript开发、Jquery&bootstrap开发、前端框架VUE开发等。
阶段四:WEB框架开发
Python全栈开发与人工智能之WEB框架开发学习内容包括:Django框架基础、Django框架进阶、BBSBlog实战项目开发、缓存和队贺携毕列中间件、Flask框架学习、Tornado框架学习、RestfulAPI等。
阶段五:爬虫开发
Python全栈开发与人工智能之爬虫开发学习内容包括:爬虫开发实战。
阶段六:全栈项目实战
Python全栈开发与人工智能之全栈项目实隐仔战学习内容包括:企业应用工具学习、CRM客户关系管理系统开发、路飞学城在线教育平台开发等。
阶段七:数据分析
Python全栈开发与人工智能之数据分析学习内容包括:金融量化分析。
阶段八:人工智能
Python全栈开发与人工智能之人工智能学习内容包括:机器学习、图形识禅芹别、无人机开发、无人驾驶等。
阶段九:自动化运维&开发
Python全栈开发与人工智能之自动化运维&开发学习内容包括:CMDB资产管理系统开发、IT审计主机管理系统开发、分布式主机监控系统开发等。
阶段十:高并发语言GO开发
Python全栈开发与人工智能之高并发语言GO开发学习内容包括:GO语言基础、数据类型与文件IO操作、函数和面向对象、并发编程等。
⑻ 深度学习 python怎么入门 知乎
自学深度学习是一个漫长而艰巨的过程。您需要有很强的线性代数和微积分背景,良好的Python编程技能,并扎实掌握数据科学、机器学习和数据工程。即便如此,在你开始将深度学习应用于现实世界的问题,并有可能找到一份深度学习工程师的工作之前,你可能需要一年多的学习和实践。然而,知道从哪里开始,对软化学习曲线有很大帮助。如果我必须重新学习Python的深度学习,我会从Andrew Trask写的Grokking deep learning开始。大多数关于深度学习的书籍都要求具备机器学习概念和算法的基本知识。除了基本的数学和编程技能之外,Trask的书不需要任何先决条件就能教你深度学习的基础知识。这本书不会让你成为一个深度学习的向导(它也没有做这样的声明),但它会让你走上一条道路,让你更容易从更高级的书和课程中学习。用Python构建人工神经元
大多数深度学习书籍都是基于一些流行的Python库,如TensorFlow、PyTorch或Keras。相比之下,《运用深度学习》(Grokking Deep Learning)通过从零开始、一行一行地构建内容来教你进行深度学习。
《运用深度学习》
你首先要开发一个人工神经元,这是深度学习的最基本元素。查斯克将带领您了解线性变换的基本知识,这是由人工神经元完成的主要计算。然后用普通的Python代码实现人工神经元,无需使用任何特殊的库。
这不是进行深度学习的最有效方式,因为Python有许多库,它们利用计算机的图形卡和CPU的并行处理能力来加速计算。但是用普通的Python编写一切对于学习深度学习的来龙去是非常好的。
在Grokking深度学习中,你的第一个人工神经元只接受一个输入,将其乘以一个随机权重,然后做出预测。然后测量预测误差,并应用梯度下降法在正确的方向上调整神经元的权重。有了单个神经元、单个输入和单个输出,理解和实现这个概念变得非常容易。您将逐渐增加模型的复杂性,使用多个输入维度、预测多个输出、应用批处理学习、调整学习速率等等。
您将通过逐步添加和修改前面章节中编写的Python代码来实现每个新概念,逐步创建用于进行预测、计算错误、应用纠正等的函数列表。当您从标量计算转移到向量计算时,您将从普通的Python操作转移到Numpy,这是一个特别擅长并行计算的库,在机器学习和深度学习社区中非常流行。
Python的深度神经网络
有了这些人造神经元的基本构造块,你就可以开始创建深层神经网络,这基本上就是你将几层人造神经元叠放在一起时得到的结果。
当您创建深度神经网络时,您将了解激活函数,并应用它们打破堆叠层的线性并创建分类输出。同样,您将在Numpy函数的帮助下自己实现所有功能。您还将学习计算梯度和传播错误通过层传播校正跨不同的神经元。
随着您越来越熟悉深度学习的基础知识,您将学习并实现更高级的概念。这本书的特点是一些流行的正规化技术,如早期停止和退出。您还将获得自己版本的卷积神经网络(CNN)和循环神经网络(RNN)。
在本书结束时,您将把所有内容打包到一个完整的Python深度学习库中,创建自己的层次结构类、激活函数和神经网络体系结构(在这一部分,您将需要面向对象的编程技能)。如果您已经使用过Keras和PyTorch等其他Python库,那么您会发现最终的体系结构非常熟悉。如果您没有,您将在将来更容易地适应这些库。
在整本书中,查斯克提醒你熟能生巧;他鼓励你用心编写自己的神经网络,而不是复制粘贴任何东西。
代码库有点麻烦
并不是所有关于Grokking深度学习的东西都是完美的。在之前的一篇文章中,我说过定义一本好书的主要内容之一就是代码库。在这方面,查斯克本可以做得更好。
在GitHub的Grokking深度学习库中,每一章都有丰富的jupiter Notebook文件。jupiter Notebook是一个学习Python机器学习和深度学习的优秀工具。然而,jupiter的优势在于将代码分解为几个可以独立执行和测试的小单元。Grokking深度学习的一些笔记本是由非常大的单元格组成的,其中包含大量未注释的代码。
这在后面的章节中会变得尤其困难,因为代码会变得更长更复杂,在笔记本中寻找自己的方法会变得非常乏味。作为一个原则问题,教育材料的代码应该被分解成小单元格,并在关键区域包含注释。
此外,Trask在Python 2.7中编写了这些代码。虽然他已经确保了代码在Python 3中也能顺畅地工作,但它包含了已经被Python开发人员弃用的旧编码技术(例如使用“for i in range(len(array))”范式在数组上迭代)。
更广阔的人工智能图景
Trask已经完成了一项伟大的工作,它汇集了一本书,既可以为初学者,也可以为有经验的Python深度学习开发人员填补他们的知识空白。
但正如泰温·兰尼斯特(Tywin Lannister)所说(每个工程师都会同意),“每个任务都有一个工具,每个工具都有一个任务。”深度学习并不是一根可以解决所有人工智能问题的魔杖。事实上,对于许多问题,更简单的机器学习算法,如线性回归和决策树,将表现得和深度学习一样好,而对于其他问题,基于规则的技术,如正则表达式和几个if-else子句,将优于两者。
关键是,你需要一整套工具和技术来解决AI问题。希望Grokking深度学习能够帮助你开始获取这些工具。
你要去哪里?我当然建议选择一本关于Python深度学习的深度书籍,比如PyTorch的深度学习或Python的深度学习。你还应该加深你对其他机器学习算法和技术的了解。我最喜欢的两本书是《动手机器学习》和《Python机器学习》。
你也可以通过浏览机器学习和深度学习论坛,如r/MachineLearning和r/deeplearning subreddits,人工智能和深度学习Facebook组,或通过在Twitter上关注人工智能研究人员来获取大量知识。
AI的世界是巨大的,并且在快速扩张,还有很多东西需要学习。如果这是你关于深度学习的第一本书,那么这是一个神奇旅程的开始。
⑼ Python爬取知乎与我所理解的爬虫与反爬虫
关于知乎验证码登陆的问题,用到了Python上一个重要的图片处理库PIL,如果不行,就把图片存到本地,手动输入。
通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。
这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。
用chrome (或者火狐 httpfox 抓包分析)的结果:
所以,必须要拿到xsrf的数值,注意这是一个动态变化的参数,每次都不一样。
拿到xsrf,下面就可以模拟登陆了。
使用requests库的session对象,建立一个会话的好处是,可以把同一个用户的不同请求联系起来,直到会话结束都会自动处理cookies。
注意:cookies 是当前目录的一个文件,这个文件保存了知乎的cookie,如果是第一个登陆,那么当然是没有这个文件的,不能通过cookie文件来登陆。必须要输入密码。
这是登陆的函数,通过login函数来登陆,post 自己的账号,密码和xrsf 到知乎登陆认证的页面上去,然后得到cookie,将cookie保存到当前目录下的文件里面。下次登陆的时候,直接读取这个cookie文件。
这是cookie文件的内容
以下是源码:
运行结果:
https://github.com/zhaozhengcoder/Spider/tree/master/spider_hu
反爬虫最基本的策略:
爬虫策略:
这两个都是在http协议的报文段的检查,同样爬虫端可以很方便的设置这些字段的值,来欺骗服务器。
反爬虫进阶策略:
1.像知乎一样,在登录的表单里面放入一个隐藏字段,里面会有一个随机数,每次都不一样,这样除非你的爬虫脚本能够解析这个随机数,否则下次爬的时候就不行了。
2.记录访问的ip,统计访问次数,如果次数太高,可以认为这个ip有问题。
爬虫进阶策略:
1.像这篇文章提到的,爬虫也可以先解析一下隐藏字段的值,然后再进行模拟登录。
2.爬虫可以使用ip代理池的方式,来避免被发现。同时,也可以爬一会休息一会的方式来降低频率。另外,服务器根据ip访问次数来进行反爬,再ipv6没有全面普及的时代,这个策略会很容易造成误伤。(这个是我个人的理解)。
通过Cookie限制进行反爬虫:
和Headers校验的反爬虫机制类似,当用户向目标网站发送请求时,会再请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页这个Cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。
反爬虫进进阶策略:
1.数据投毒,服务器在自己的页面上放置很多隐藏的url,这些url存在于html文件文件里面,但是通过css或者js使他们不会被显示在用户看到的页面上面。(确保用户点击不到)。那么,爬虫在爬取网页的时候,很用可能取访问这个url,服务器可以100%的认为这是爬虫干的,然后可以返回给他一些错误的数据,或者是拒绝响应。
爬虫进进阶策略:
1.各个网站虽然需要反爬虫,但是不能够把网络,谷歌这样的搜索引擎的爬虫给干了(干了的话,你的网站在网络都说搜不到!)。这样爬虫应该就可以冒充是网络的爬虫去爬。(但是ip也许可能被识破,因为你的ip并不是网络的ip)
反爬虫进进进阶策略:
给个验证码,让你输入以后才能登录,登录之后,才能访问。
爬虫进进进阶策略:
图像识别,机器学习,识别验证码。不过这个应该比较难,或者说成本比较高。
参考资料:
廖雪峰的python教程
静觅的python教程
requests库官方文档
segmentfault上面有一个人的关于知乎爬虫的博客,找不到链接了
⑽ python怎么成为高手 知乎
我个人比较推崇limodou. 谦虚, 有实力, 爱分享, 这些标签让李大哥在Python界口碑一直很好, 另外, 他的ulipad, 一直是很多python初学者最喜欢用的编辑器. Uliweb也是很优秀的web框架 国内还有很多人,