【python爬虫】爬取知乎收藏夹内所有问题名称地址保存至Mysql
来源:互联网 发布:比利时保拉王后知乎 编辑:程序博客网 时间:2024/06/06 01:06
转载请注明源地址,代码在Github中(可能会更新):https://github.com/qqxx6661/python/
初学python,练手项目。该代码并没有什么太大的实际意义,毕竟收藏可以直接在网页上看,没必要这样折腾。仅作学习之用。
PS:请勿长时间爬取,以免ip被知乎屏蔽。代码中代理有一定问题,由于知乎是走https,普通http代理没法用,实际运行中就算用了代理还是走本地ip
该程序中用到(可以初步理解):
1.python连接数据库:Mysql-connector
2.re正则表达式
3.requests用法:代理,post,get,headers等
4.验证码抓取
5.文件保存和读取
运行截图:
# -*- coding: utf-8 -*-from __future__ import unicode_literalsimport requestsimport reimport timefrom subprocess import Popenimport mysql.connectorclass Spider: def __init__(self): print '爬虫初始化......' self.s = requests.session() # 代理信息 self.proxies = {"http": "http://42.159.195.126:80", "https": "https://115.225.250.91:8998"} try: r = self.s.get('http://www.baidu.com/', proxies=self.proxies) except requests.exceptions.ProxyError, e: print e print '代理失效,请修改代码更换代理' exit() print '代理通过验证,可以使用' # 知乎headers self.headers = { 'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Referer': 'https://www.zhihu.com', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0', 'Host': 'www.zhihu.com' } # 登陆知乎获取验证码 r = self.s.get('https://www.zhihu.com', headers=self.headers, proxies=self.proxies) cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags=0) strlist = cer.findall(r.text) _xsrf = strlist[0] #print(r.request.headers) #print(str(int(time.time() * 1000))) Captcha_URL = 'https://www.zhihu.com/captcha.gif?r=' + str(int(time.time() * 1000)) r = self.s.get(Captcha_URL, headers=self.headers) with open('code.gif', 'wb') as f: f.write(r.content) Popen('code.gif', shell=True) captcha = input('captcha: ') login_data = { # 填写账号信息 '_xsrf': _xsrf, 'phone_num': '18769201984', 'password': 'ybs852421', 'remember_me': 'true', 'captcha': captcha } # 登陆知乎 r = self.s.post('https://www.zhihu.com/login/phone_num', data=login_data, headers=self.headers, proxies=self.proxies) print(r.text) def get_collections(self): # 获取关注的收藏夹 # 抓取自己创建的收藏夹 r = self.s.get('http://www.zhihu.com/collections/mine', headers=self.headers, proxies=self.proxies) # 抓取关注的收藏夹 #r = self.s.get('https://www.zhihu.com/collections', headers=self.headers, proxies=self.proxies) # 获取收藏夹名数组和地址名数组 re_mine_url = re.compile(r'<a href="(/collection/\d+?)"') list_mine_url = re.findall(re_mine_url, r.content) re_mine_name = re.compile(r'\d"\s>(.*?)</a>') list_mine_name = re.findall(re_mine_name, r.content) #print '收藏夹名称:', list_mine_name # for循环遍历数组 for i in range(len(list_mine_url)): list_mine_url[i] = 'https://www.zhihu.com' + list_mine_url[i] #print '收藏夹地址:', list_mine_url conn = mysql.connector.connect(user='root', password='123456', database='test') cursor = conn.cursor() for i in range(len(list_mine_url)): page = 0 sql = 'create table %s (id integer(10) primary key auto_increment, name varchar(100), address varchar(100))' % list_mine_name[i].decode("UTF-8") print sql cursor.execute(sql) conn.commit() while 1: page += 1 col_url = list_mine_url[i] col_url = col_url + '?page=' + str(page) print '正在抓取:', col_url r = self.s.get(col_url, headers=self.headers, proxies=self.proxies) re_col_url = re.compile(r'href="(/question/\d*?)">.+?</a></h2>') list_col_url = re.findall(re_col_url, r.content) re_col_name = re.compile(r'\d">(.+?)</a></h2>') list_col_name = re.findall(re_col_name, r.content) if list_col_name: #print '问题名称', list_col_name # for循环遍历数组 for j in range(len(list_col_url)): list_col_url[j] = 'https://www.zhihu.com' + list_col_url[j] #print '问题地址:', list_col_url for j in range(len(list_col_url)): sql = 'insert into %s (name, address) values ("%s", "%s")' % (list_mine_name[i].decode("UTF-8"), list_col_name[j].decode("UTF-8"), list_col_url[j]) cursor.execute(sql) conn.commit() else: print '该收藏夹已无更多问题' break cursor.close()spider = Spider()spider.get_collections()print '爬虫执行完毕,请检查数据库'
1 0
- 【python爬虫】爬取知乎收藏夹内所有问题名称地址保存至Mysql
- 【python爬虫】爬取知乎收藏夹内所有图片
- Python Requests爬虫——获取一个收藏夹下所有答案的图片
- python读取xml数据库中表内所有数据,获取数据库中所有表的字段名称
- Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库
- python 将爬虫内容保存到mysql中
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
- Python爬虫系列之----Scrapy(八)爬取豆瓣读书某个tag下的所有书籍并保存到Mysql数据库中去
- [Python 爬虫之路4] 使用selenium爬取知乎任意一个问题下,所有回答中的图片
- 保存APP内所有异常
- 第一个Python爬虫,爬取某个新浪博客所有文章并保存为doc文档
- python爬虫(中)--保存
- mysql中IP地址的保存和查询问题
- Python爬虫获取图片并下载保存至本地
- python爬虫实现----github地址
- Python爬虫实战学习地址
- python,DNS,MySQL,爬虫
- 使用python爬虫抓取页面之后,将页面保存到Mysql数据库中
- iOS 自动布局注意事项
- 二十三.优化整个项目界面
- ajax 多文件上传
- HDU 4352 XHXJ's LIS(数位DP+状压)
- java.security.NoSuchAlgorithmException: TLS SSLContext not available
- 【python爬虫】爬取知乎收藏夹内所有问题名称地址保存至Mysql
- 【机房收费】上下机
- poj 2367 Genealogical tree ( 拓扑排序--二维数组)
- (5) Java GC算法及种类
- java 简单贪吃蛇
- listview的局部刷新
- 51nod:1002 数塔取数问题
- ubuntu下如何控制风扇速度?
- linux uniq 命令详解