【爬虫学习2】Requests cookies爬取知乎个人timeline
上次用Requests爬取了静态网页-正则表达式加Requests爬取猫眼电影排行
这次想尝试使用requests.Session进行cookie登录爬取网页内容
-全部代码见于我的Git
- 准备素材
- 新建工程及文件
- 获取cookies和headers
- 一个注意
- 编写爬虫
- 载入并格式化cookis
- 载入并格式化headers
- 获取网页并保存
- 保存网页的目的
- 一个注意
- 正则表达式匹配
- 小技巧
- 获取结果
- 一个问题
- 参考资料
准备素材
准备cookies内容和headers内容
新建工程及文件
获取cookies和headers
1.进入知乎并登录
2.F12 打开开发工具->选择“网络”选项卡 (这里使用的是win10自带的Microsoft Edge)
3.刷新页面并选中列表中第一项
右侧可看到如图cookies和headers等相关信息
4.右键cookie条目->复制值
打开之前新建的cookie文件 直接粘贴进去
5.按照4的步骤分别复制
User-Agent
Accept
Accept-Language
Accept-Encoding
Referer
条目至headers文件并按照如图修改和格式化
一个注意
在爬取时如果不加入headers可能会被服务器返回500错误码
加上headers旨在骗过服务器
编写爬虫
载入并格式化cookis
def get_cookie():'''从文件中获得cookies'''with open('cookie', 'r') as f:acookie = {}for line in f.read().split(";"):name, value = line.strip().split('=', 1)acookie[name] = valuereturn acookie
载入并格式化headers
def get_headers():'''获得标准头文件'''with open('headers', 'r') as f:headers = {}for line in f.read().split(';\n'):name, value = line.split(':', 1)headers[name] = valuereturn headers
获取网页并保存
import requests
def save_html(html):'''保存网页'''with open('html.txt', 'w', encoding='utf-8') as f:f.write(html)f.close()def main():url = 'https://www.zhihu.com'headers = get_headers()cookies = get_cookie()s = requests.Session()req2 = s.get(url, headers=headers, cookies=cookies)html = req2.content.decode('utf-8')save_html(html)if __name__ == '__main__':main()
保存网页的目的
1.若是动态网页,使用浏览器的审查元素功能获得的代码和爬虫获得的代码会有差异,而正则表达式是对爬取的代码进行匹配,故要以获取的页面代码作为参考。
2.方便将代码块复制出来对每个匹配项进行单独的测试正则表达式在线测试
一个注意
这里通过content获得页面必须使用.decode格式化成utf-8格式
html = req2.content.decode('utf-8')
保存时write方法中也必须加入encoding=’utf-8’参数
open('html.txt', 'w', encoding='utf-8')
否则中文是乱码
正则表达式匹配
通过审查元素和保存下来的网页配合分析
可构造如下正则表达式
import re
def parse_one_page(html):'''进行正则匹配'''pattern = re.compile('<div class="Card TopstoryItem.*?name="User".*?>(.*?)</a>' #用户姓名+'.*?</span></span>(.*?)</span>' #用户操作+'.*?<h2 class="ContentItem-title.*?name="Title".*?>(.*?)</a' #推荐内容+'.*?<meta itemprop="name" content="(.*?)"/>', re.S) #作者items = re.findall(pattern, html)for item in items:yield {'ActiveUser': item[0],'Active': item[1],'Title': item[2],'Author': item[3]}
小技巧
这里拿不准可以从html.txt相关代码块拿出来单独测试每一个匹配项
获取结果
def main():url = 'https://www.zhihu.com'headers = get_headers()cookies = get_cookie()s = requests.Session()req2 = s.get(url, headers=headers, cookies=cookies)html = req2.content.decode('utf-8')save_html(html)##n = 0for item in parse_one_page(html):print(item)
结果如图
一个问题
这里我们打开保存下来的html文件会发现
即爬虫没有获取到选中处的内容
并且
查看爬取结果会发现原页面的条数远远大于结果显示的9条
原因和解决方法未知
期待在接下来学习中解决这个问题
参考资料
http://www.jianshu.com/p/c94de9f1ef7c
http://blog.csdn.net/majianfei1023/article/details/49927969
http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced
【爬虫学习2】Requests cookies爬取知乎个人timeline相关推荐
- 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 爬虫学习(一)---爬取电影天堂下载链接
欢迎加入python学习交流群 667279387 爬虫学习 爬虫学习(一)-爬取电影天堂下载链接 爬虫学习(二)–爬取360应用市场app信息 主要利用了python3.5 requests,Bea ...
- python爬虫实战(一)--爬取知乎话题图片
原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...
- 爬虫学习(二)--爬取360应用市场app信息
欢迎加入python学习交流群 667279387 爬虫学习 爬虫学习(一)-爬取电影天堂下载链接 爬虫学习(二)–爬取360应用市场app信息 代码环境:windows10, python 3.5 ...
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下: 1.爬取内容总为空,其原因 ...
- 爬虫练习(一)爬取知网、万方、维普文献标题、作者、刊物来源等信息
刚刚开始学习Python,今天一周整,浏览了站内一些大侠博客相关内容,自己也尝试着写了一个爬虫. 直接借鉴了几位大侠的经验,如有冒犯之处恳请海涵. 先说说目的吧,本爬虫的目的是根据EXCEL文件的作者 ...
最新文章
- Mac 从Makefile 编译 Rocksdb 源码的一些注意事项
- 中国剩余定理matlab非互质,中国剩余定理模板(互质版和非互质版)
- 【收藏】怎样把 macOS 安装在移动硬盘或 U 盘里
- [html] 使用a标签的download属性下载文件会有跨域问题吗?如何解决?
- centos php 版本升级 至5.3 wordpress3.7
- 前端开发必看 | Vue在前端市场这么火,它到底是什么?
- OC中的内省方法初探
- 前端html5 css3 教案,Web前端开发任务驱动式教程(HTML5+CSS3+JavaScript)
- 摘录:《晨间日记的奇迹》
- 网站刷关键词_B2B关键词调研:如何精准地定位B端客户?(下)
- pycharm python 依赖管理_怎么解决pycharm license Acti的方法_python
- springboot项目中的 Request method 'POST' not supported问题
- c语言已知加速度求位移速度,已知初速度,加速度,时间,求位移
- 转:量化交易零基础入门教程之——python基本语法与变量
- Weex生态质量建设
- 2021年高压电工考试总结及高压电工考试技巧
- 教你批量消除视频原声,一学就会
- python爬虫课程笔记
- Andriod networking
- day13-event2
热门文章
- 计算机老师年终考核个人工作总结,年终总结:计算机教师个人年终总结
- 12月5日科技资讯|iPhone 用户流失令人担忧;.NET Core 3.1 发布
- 1158万竞争对手,我将突出重围
- 154 spidev:SPI“万能”驱动
- reactjs初级学习
- BS1036-基于java+路径规划+CS架构实现的A星算法求解最短路径问题演示程序
- 职业梦想是计算机的英语作文,有关职业梦想的英语作文
- [翻译]NUnit---Condition Asserts Comparisons Asserts Type Asserts (五)
- 北理工汇编语言与接口技术结课实验,包括大数乘法,计算器,贪吃蛇三个项目
- HTML5画布: clearRect()