1. 如何使用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的配置文件如下:
从爬取的用户数据可分析的地方很多,比如地域、学历、年龄等等,我就不一一列举了。另外,我觉得爬虫是一件非常有意思的事情,在这个内容消费升级的年代,如何在广阔的互联网的数据海洋中挖掘有价值的数据,是一件值得思考和需不断践行的事情。
2. 关于用python抓取知乎关注的人
用chrome的开发者工具,Firefox的firebug,或者第三方的fiddler,抓包仔细分析具体的请求过程就好。
尤其是fiddler,前端神器,写爬虫必备。
3. 如何用python写爬虫 知乎
学习
基本的爬虫工作原理
基本的http抓取工具,scrapy
Bloom Filter: Bloom Filters by Example
如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq: https://github.com/nvie/rq
rq和Scrapy的结合:darkrho/scrapy-redis · GitHub
后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)
4. 如何用python 写一个爬虫用来爬P 站特定标签下的高赞作品
Python写这些爬虫,批量获取还是挺简单的……不长逛P站但是写了个可以获取知乎指定收藏夹下的高赞答案的东西……
获取知乎指定收藏夹下的高赞答案
获取P站特定标签下的高赞作品
这两个需求应该是差不多的……
爬取收藏夹的代码大概是这样:
__author__ = '7sDream'
import hu
collection = hu.Collection('')
for answer in collection.answers:
if answer.upvote >= 1000:
answer.save(path=collection.name)
结果是这样:
理论上来说爬P站应该差不多……
做好cookies管理,HTML解析就差不多了。
如果Python会的差不多了看看这个知乎模块的源码应该能写出来P站的
5. 怎样用Python设计一个爬虫模拟登陆知乎
import requestsimport timeimport jsonimport osimport reimport sysimport subprocessfrom bs4 import BeautifulSoup as BS class ZhiHuClient(object): """连接知乎的工具类,维护一个Session 2015.11.11 用法: client = ZhiHuClient() # 第一次使用时需要调用此方法登录一次,生成cookie文件 # 以后可以跳过这一步 client.login("username", "password") # 用这个session进行其他网络操作,详见requests库 session = client.getSession() """ # 网址参数是账号类型 TYPE_PHONE_NUM = "phone_num" TYPE_EMAIL = "email" loginURL = r"http://www.hu.com/login/{0}" homeURL = r"http://www.hu.com" captchaURL = r"http://www.hu.com/captcha.gif" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Host": "www.hu.com", "Upgrade-Insecure-Requests": "1", } captchaFile = os.path.join(sys.path[0], "captcha.gif") cookieFile = os.path.join(sys.path[0], "cookie") def __init__(self): os.chdir(sys.path[0]) # 设置脚本所在目录为当前工作目录 self.__session = requests.Session() self.__session.headers = self.headers # 用self调用类变量是防止将来类改名 # 若已经有 cookie 则直接登录 self.__cookie = self.__loadCookie() if self.__cookie: print("检测到cookie文件,直接使用cookie登录") self.__session.cookies.update(self.__cookie) soup = BS(self.open(r"http://www.hu.com/").text, "html.parser") print("已登陆账号: %s" % soup.find("span", class_="name").getText()) else: print("没有找到cookie文件,请调用login方法登录一次!") # 登录 def login(self, username, password): """ 验证码错误返回: {'errcode': 1991829, 'r': 1, 'data': {'captcha': '请提交正确的验证码 :('}, 'msg': '请提交正确的验证码 :('} 登录成功返回: {'r': 0, 'msg': '登陆成功'} """ self.__username = username self.__password = password self.__loginURL = self.loginURL.format(self.__getUsernameType()) # 随便开个网页,获取登陆所需的_xsrf html = self.open(self.homeURL).text soup = BS(html, "html.parser") _xsrf = soup.find("input", {"name": "_xsrf"})["value"] # 下载验证码图片 while True: captcha = self.open(self.captchaURL).content with open(self.captchaFile, "wb") as output: output.write(captcha) # 人眼识别 print("=" * 50) print("已打开验证码图片,请识别!") subprocess.call(self.captchaFile, shell=True) captcha = input("请输入验证码:") os.remove(self.captchaFile) # 发送POST请求 data = { "_xsrf": _xsrf, "password": self.__password, "remember_me": "true", self.__getUsernameType(): self.__username, "captcha": captcha } res = self.__session.post(self.__loginURL, data=data) print("=" * 50) # print(res.text) # 输出脚本信息,调试用 if res.json()["r"] == 0: print("登录成功") self.__saveCookie() break else: print("登录失败") print("错误信息 --->", res.json()["msg"]) def __getUsernameType(self): """判断用户名类型 经测试,网页的判断规则是纯数字为phone_num,其他为email """ if self.__username.isdigit(): return self.TYPE_PHONE_NUM return self.TYPE_EMAIL def __saveCookie(self): """cookies 序列化到文件 即把dict对象转化成字符串保存 """ with open(self.cookieFile, "w") as output: cookies = self.__session.cookies.get_dict() json.mp(cookies, output) print("=" * 50) print("已在同目录下生成cookie文件:", self.cookieFile) def __loadCookie(self): """读取cookie文件,返回反序列化后的dict对象,没有则返回None""" if os.path.exists(self.cookieFile): print("=" * 50) with open(self.cookieFile, "r") as f: cookie = json.load(f) return cookie return None def open(self, url, delay=0, timeout=10): """打开网页,返回Response对象""" if delay: time.sleep(delay) return self.__session.get(url, timeout=timeout) def getSession(self): return self.__session if __name__ == '__main__': client = ZhiHuClient() # 第一次使用时需要调用此方法登录一次,生成cookie文件 # 以后可以跳过这一步 # client.login("username", "password") # 用这个session进行其他网络操作,详见requests库 session = client.getSession()
6. 怎样用Python设计一个爬虫模拟登陆知乎
两种方法:
1.带cookielib和urllib2
import urllib2
import urllib
import cookielib
def login():
email = raw_input("请输入用户名:")
pwd = raw_input("请输入密码:") data={"email":email,"password":pwd}
post_data=urllib.urlencode(data) cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))headers
={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}website =
raw_input('请输入网址:')req=urllib2.Request(website,post_data,headers)content=opener.open(req)print
content.read()
2.使用selenium
import selenium import webdriver
browser=webdriver.Firefox()
browser.get("Url")
browser.find_element_by_id(" ").sendkey("username")
browser.find_element_by_id(" ").sendkey("pass")
browser.find_element_by_id(" ").click()
其实我这个最简单了,用的python3,requests, 只需要验证一次,就会保存cookies,下次登录使用cookies登录。
第一步、打开首页获取_xref值,验证图片 第二步、输入账号密码 第三步、看是否需要验证、要则下载验证码图片,手动输入
第四步、判断是否登录成功、登录成功后获取页面值。
7. python爬虫怎么赚钱 知乎
第一种。找爬虫外包工作
网络爬虫最通常的挣钱方式通过外包网站,做中小规模的爬虫项目,向甲方提供数据抓取,数据结构化,数据清洗等服务。新入行的程序员大多数都会先尝试这个方向,直接靠技术手段挣钱,也是技术人员最擅长的方式,但是由于竞争人员太多,价格可能不是很贵,白菜价。
第二种。抓取数据做网站
可以通过Python爬虫抓取数据,来做网站挣钱,每个月有小几千块钱,虽然挣得不多,但是做成之后不需要怎么维护,也算是有被动收入了。
第三种。在职大学生
如果你是在职大学生,数学或者计算机相关专业的人员,编程能力还可以的话,可以稍微看一下编程知识,比如爬虫库、HTML解析、内容存储等,复杂还需要了解URL排重、模拟登录、验证码识别、多线程等,这部分人员工程经验比较少,想要通过爬虫赚钱的话,可以找一些少量数据抓取的项目,一点点积累经验,后期可以尝试接一些监控类的项目或者大规模抓取的项目。
第四种。在职人员
如果你本身就从事Python网络爬虫工作,挣钱是非常简单的。在职人员比较熟悉项目开发流程,工程经验丰富,能对一个任务的难度、时间、花费进行合理评估,可以尝试去找一些大规模抓取任务、监控任务、移动端模拟登录并抓取任务等,收益是非常可观的。
第五种。运营自媒体
如果你技术好,经验丰富,可以自己尝试运营公众号、自媒体、博客等,现在学习Python写爬虫的人越来越多,很多都是非科班出身,需求量大增,你可以利用自己的技术多写一些教程和学习经验总结,运营效果不错的话,也可以获得可观的收入。
8. python爬虫登录知乎后怎样爬取数据
模拟登录
很多网站,比如知乎、微博、豆瓣,都需要登录之后,才能浏览某些内容。所以想要爬取这类网站,必须先模拟登录。比较简单的方式是利用这个网站的 cookie。cookie 相当于是一个密码箱,里面储存了用户在该网站的基本信息。在一次登录之后,网站会记住你的信息,把它放到cookie里,方便下次自动登录。所以,要爬取这类网站的策略是:先进行一次手动登录,获取cookie,然后再次登录时,调用上一次登录得到的cookie,实现自动登录。
动态爬取
在爬取知乎某个问题的时候,需要将滑动鼠标滚轮到底部,以显示新的回答。静态的爬取方法无法做到这一点,可以引入selenium库来解决这一问题。selenium库模拟人浏览网站、进行操作,简单易懂。
9. 知乎python 爬虫如何入门学习
链接:https://pan..com/s/1wMgTx-M-Ea9y1IYn-UTZaA
课程简介
毕业不知如何就业?工作效率低经常挨骂?很多次想学编程都没有学会?
Python 实战:四周实现爬虫系统,无需编程基础,二十八天掌握一项谋生技能。
带你学到如何从网上批量获得几十万数据,如何处理海量大数据,数据可视化及网站制作。
课程目录
开始之前,魔力手册 for 实战学员预习
第一周:学会爬取网页信息
第二周:学会爬取大规模数据
第三周:数据统计与分析
第四周:搭建 Django 数据可视化网站
......