selenium+python爬取简书文章
页面加载逻辑
当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成为了你的选择目标,如果你尝试之后会发现并没有想象的那么简单,因为里面包含了很多js相关的数据传输。 让我先使用传统的爬虫演示一下吧: >
打开简书首页,似乎没有什么特别的
jianshu首页
打开
chrome
的开发者模式,发现文章的标题,href
都在a
标签里,似乎也没有什么不一样的
a.png
接下来就是寻找页面上所有的
a
标签,但是且慢如果你仔细观察就会发现滑轮滚到一半的时候页面就会加载更多,这样的步骤会重复三次知道底部出现的按钮
滑轮
不仅如此底部的的
href
并没有告诉我们加载剩下的页面信息,唯一的办法是不断点击这个按钮
load_more.png
什么,将滑轮重复三次滑倒页面的中央并且不断点击按钮这种操作http
请求可做不到,这更像是js操作?没错,简书的文章并不是常规的http请求,我们不能根据不同url不断重定向,而是页面的一些动作来加载页面信息。
selenium介绍
selenium是一个web自动化测试工具,支持很多种语言,我们在这里可以使用python的selenium做爬虫使用,爬取简书的过程中,它的工作原理是不断注入js代码,让页面源源不断的加载,最后再提取所有的a
标签。首先你得在python中下载selenium包
>>> pip3 install selenium
chromedriver
selenium必须搭载浏览器使用,这里我使用的是chromedriver,Chrome的开源测试版,它可以使用headless模式不需要显示前段来访问网页,算是最大特性了。
python中操作
在写代码之前一定要把chromedriver同一文件夹内,因为我们需要引用PATH,这样方便点。首先我们的第一个任务是刷出加载更多
的按钮,需要做3次将滑轮重复三次滑倒页面的中央,这里方便起见我滑到了底部
from selenium import webdriver
import time browser = webdriver.Chrome("./chromedriver") browser.get("https://www.jianshu.com/")for i in range(3):browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") // execute_script是插入js代码的time.sleep(2) //加载需要时间,2秒比较合理
看看效果
刷出了按钮
接下来就是不断点击按钮加载页面,继续加入刚才的py文件之中
for j in range(10): //这里我模拟10次点击 try: button = browser.execute_script("var a = document.getElementsByClassName('load-more'); a[0].click();")time.sleep(2) except: pass'''上面的js代码说明一下var a = document.getElementsByClassName('load-more');选择load-more这个元素a[0].click(); 因为a是一个集合,索引0然后执行click()函数
'''
这个我就不贴图了,成功之后就是不断地加载页面 ,知道循环完了为止,接下来的工作就简单很多了,就是寻找a
标签,get
其中的text
和href
属性,这里我直接把它们写在了txt文件之中.
titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f:
for t in titles:
try:
f.write(t.text + " " + t.get_attribute("href"))
f.write("\n")
except TypeError:
pass
最终结果
简书文章
headless模式
不断加载页面肯定也很烦人,所以我们测试成功之后并不想把浏览器显示出来,这需要加上headless模式
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome("./chromedriver", chrome_options=options) //把上面的browser加入chrome_options参数
总结
当我们没办法使用正常的http请求爬取时,可以使用selenium操纵浏览器来抓取我们想要的内容,这样有利有弊,比如
优点
可以暴力爬虫
简书并不需要cookie才能查看文章,不需要费劲心思找代理,或者说我们可以无限抓取并且不会被ban
首页应该为ajax传输,不需要额外的http请求
缺点
爬取速度太满,想象我们的程序,点击一次需要等待2秒那么点击600次需要1200秒, 20分钟...
附加
这是所有完整的代码
from selenium import webdriverimport timeoptions = webdriver.ChromeOptions() options.add_argument('headless') browser = webdriver.Chrome("./chromedriver", chrome_options=options)browser.get("https://www.jianshu.com/")for i in range(3):browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)# print(browser)for j in range(10): try:button = browser.execute_script("var a = document.getElementsByClassName('load-more'); a[0].click();")time.sleep(2) except: pass#titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try:f.write(t.text + " " + t.get_attribute("href"))f.write("\n") except TypeError: pass
如果你喜欢本篇文章的话, 快点击关注,喜欢,打赏我吧
selenium+python爬取简书文章相关推荐
- 简书python_使用 Python 爬取简书网的所有文章
01 抓取目标 我们要爬取的目标是「 简书网 」. 打开简书网的首页,随手点击一篇文章进入到详情页面. 我们要爬取的数据有:作者.头像.发布时间.文章 ID 以及文章内容. 02 准备工作 在编写爬虫 ...
- 简书爬ajax接口获取csrf,Python爬取简书主页信息
主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率. 1. 关键点: 使用单线程爬取,未登录,爬取简书主页Ajax加载的内容.主要有 ...
- python爬虫——爬取简书文章
这段时间在做的事情需要从网上获得一点资讯类似文章啊.电影啊.新闻啊等等,看了很久感觉用简书这个网址来做爬虫相对来说简单一点,可以不需要设置登录啥的就能够获取到内容,相比较起来已经很容易了. (一)分析 ...
- python2.7爬虫实例-Python2.7爬虫-爬取简书文章-入门
参考原文: 分为五个模块:主模块.URL管理器.下载器.解析器.输出器. 主模块首先调用URL管理器管理URL,接着将URL传给下载器,下载器发送请求到URL并得到响应数据,本例中除了第一次请求之外, ...
- python 简书_python爬取简书网文章的方法
python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...
- 基于python爬虫的论文标题_Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】...
本文实例讲述了Python3实现爬取简书首页文章标题和文章链接的方法.分享给大家供大家参考,具体如下: from urllib import request from bs4 import Beaut ...
- Node爬取简书首页文章
Node爬取简书首页文章 博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章 流程分析 使用superagent发送http请求到服务端,获取HTML文本 用cheerio解析获得的 ...
- 爬虫练习-爬取简书网热评文章
前言: 使用多进程爬虫方法爬取简书网热评文章,并将爬取的数据存储于MongoDB数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.17 环境: Python3(Anaconda3) ...
- scrapy实战之爬取简书
这一节,我们利用scrapy来爬取简书整站的内容.对于一篇文章详情页面,我们发现许多内容是Ajax异步加载的,所以使用传统方式返回的response里并没有我们想要的数据,例如评论数,喜欢数等等.对于 ...
最新文章
- Kotlin项目实践指南(上)
- java缺_java – 缺少主类
- 甘肃2019年9月计算机二级报名入口,2019年9月甘肃计算机二级考试成绩查询入口...
- linux7.2配置多路径软件,RHEL6使用系统自带多路径软件配置多路径,rhel6路径
- pythonrandom函数_python之random函数
- k8s访问控制--理解RBAC和OPA
- ckeditor编辑的使用方法
- “sudo: apt-get:找不到命令”的解决方法
- Power Query获取整理多来源数据
- Nginx(八)-- 负载均衡
- 阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果
- Android入门(四)UI-创建自定义控件
- PHP数组数据结构图,PHP数组与数据结构
- android studio定位gps
- 灵异:各国家千年诅咒悬迷——不可思议
- vue移动端app项目
- 《当程序员的那些狗日日子》二
- 老公分不到股份?问题根源是创业者人才观缺失
- Drain算法:日志解析
- 思创易控cetron-Cetron Wi-Fi 6 AP 荣获2020年度创新产品•鼎智奖