标签分类 技术文章:
当前位置:首页 > Python技术文章 > selenium+python如何爬取简书网站

selenium+python爬取简书网站的方法

  • 发布时间:
  • 作者:码农之家原创
  • 点击:119

这篇文章主要知识点是关于selenium、python、简书、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

更多Python相关的学习资源可以参阅 Python电子书程序设计电子书 等栏目。

selenium+python如何爬取简书网站

这篇文章介绍的内容是selenium+python如何爬取简书网站 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

 

页面加载逻辑

 

当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成为了你的选择目标,如果你尝试之后会发现并没有想象的那么简单,因为里面包含了很多js相关的数据传输。 让我先使用传统的爬虫演示一下吧: >

打开简书首页,似乎没有什么特别的

selenium+python如何爬取简书网站

jianshu首页

打开chrome的开发者模式,发现文章的标题,href都在a标签里,似乎也没有什么不一样的

selenium+python如何爬取简书网站

a.png

接下来就是寻找页面上所有的a标签,但是且慢如果你仔细观察就会发现滑轮滚到一半的时候页面就会加载更多,这样的步骤会重复三次知道底部出现阅读更多的按钮

selenium+python如何爬取简书网站

滑轮

不仅如此底部的阅读更多的href并没有告诉我们加载剩下的页面信息,唯一的办法是不断点击阅读更多这个按钮

selenium+python如何爬取简书网站

load_more.png

什么,将滑轮重复三次滑倒页面的中央并且不断点击按钮这种操作http请求可做不到,这更像是js操作?没错,简书的文章并不是常规的http请求,我们不能根据不同url不断重定向,而是页面的一些动作来加载页面信息。

selenium+python如何爬取简书网站

selenium介绍

selenium是一个web自动化测试工具,支持很多种语言,我们在这里可以使用python的selenium做爬虫使用,爬取简书的过程中,它的工作原理是不断注入js代码,让页面源源不断的加载,最后再提取所有的a标签。首先你得在python中下载selenium包

>>> pip3 install selenium

chromedriver

selenium必须搭载浏览器使用,这里我使用的是chromedriver,Chrome的开源测试版,它可以使用headless模式不需要显示前段来访问网页,算是最大特性了。

python中操作

在写代码之前一定要把chromedriver同一文件夹内,因为我们需要引用PATH,这样方便点。首先我们的第一个任务是刷出加载更多的按钮,需要做3次将滑轮重复三次滑倒页面的中央,这里方便起见我滑到了底部

from selenium import webdriverimport 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秒比较合理

看看效果

selenium+python如何爬取简书网站

刷出了按钮

接下来就是不断点击按钮加载页面,继续加入刚才的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其中的texthref属性,这里我直接把它们写在了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

最终结果

selenium+python如何爬取简书网站

简书文章

headless模式

不断加载页面肯定也很烦人,所以我们测试成功之后并不想把浏览器显示出来,这需要加上headless模式

options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome("./chromedriver", chrome_options=options) //把上面的browser加入chrome_options参数

总结

当我们没办法使用正常的http请求爬取时,可以使用selenium操纵浏览器来抓取我们想要的内容,这样有利有弊,比如

  • 优点

  1. 可以暴力爬虫

  2. 简书并不需要cookie才能查看文章,不需要费劲心思找代理,或者说我们可以无限抓取并且不会被ban

  3. 首页应该为ajax传输,不需要额外的http请求

缺点

  1. 爬取速度太满,想象我们的程序,点击一次需要等待2秒那么点击600次需要1200秒, 20分钟...

附加

这是所有完整的代码

from selenium import webdriverimport time

options = 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

 

相关推荐:

[python爬虫] Selenium爬取新浪微博内容及用户信息

[Python爬虫]利用Selenium等待Ajax加载及模拟自动翻页,爬取东方财富网公司公告

Python爬虫:Selenium+ BeautifulSoup 爬取JS渲染的动态内容(雪球网新闻)

以上就是selenium+python如何爬取简书网站的详细内容,更多请关注码农之家其它相关文章!

以上就是本次给大家分享的关于Python的全部知识点内容总结,大家还可以在下方相关文章里找到如何由java转学python、 python ddt数据驱动实例代码、 python测试opencv时imread导致、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:python调试中print()和断言实例讲解

下一篇:python支持返回函数的知识点总结

展开 +

收起 -

学习笔记
网友NO.720672

玩转python selenium鼠标键盘操作(ActionChains)

用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains selenium.webdriver.common.action_chains.ActionChains(driver) 这个类基本能够满足我们所有对鼠标操作的需求。 1.ActionChains基本用法 首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。 这种情况下我们可以有两种调用方法: •链式写法 menu = driver.find_element_by_css_selector(".nav")hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform() •分步写法 menu = driver.find_element_by_css_selector(".nav")hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")actions = ActionChains(driver)actions.move_to_element(menu)actions.click(hidden_submenu)actions.perform() 两种写法本质是一样的,ActionChains都会按照顺序执行所有的操作。 2.ActionChains方法列表 click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_element=None) ——点击鼠标右键 double_click(on_element=None) ——双击鼠标左键 drag_and_drop(source, targ……

网友NO.389599

python selenium登录豆瓣网过程解析

登录流程: 实例化一个driver,然后driver.get()发送请求 最重要的:切换iframe子框架,因为豆瓣的网页中的登录那部分是一个ifrme,必须切换才能寻找到对应元素 利用selenium切换到账号密码登录 利用selenium输入账户和密码 利用selenium点击登录按钮 然后利用字典推导式保存了一下cookie 代码实现: import timefrom selenium import webdriver# 实例化driverdriver = webdriver.Chrome()driver.get('https://www.douban.com/')## 切换iframe子框架driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])driver.maximize_window() # 最大化窗口driver.find_element_by_css_selector('li.account-tab-account').click() # 点击密码登录的标签driver.find_element_by_id('username').send_keys('13343396443')driver.find_element_by_id('password').send_keys('lilei120400')# 点击‘登录豆瓣'按钮# 这里需要注意,当元素的class属性有好几个的时候,此函数的参数填class的第一个就好driver.find_element_by_class_name('btn').click() # 元素的class属性:btn btn-account# 获取cookies,字典推导式cookies = {i['name']: i['value'] for i in driver.get_cookies()}print(cookies)time.sleep(5)driver.quit() # 退出浏览器 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。 ……

网友NO.230133

如何搭建python+selenium开发环境教程讲解

这篇文章主要为大家详细介绍了python+selenium开发环境搭建的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 web 调试工具介绍和开发环境搭建 python与selenium开发环境搭建: 一、下载python软件: https://www.python.org/ 下载完后,进行安装,安装成功后,打开IDLE(Python 3.6.2),如下图: 如上图在里面输入print(Hello Wrod!)按回车,出现Hello Wrod!,说明已经把IDLE装好了,下面打开dos命令窗口输入Python按回车。如下图: 出现python版本号等信息说明python已经安装成功。如果出现错误信息,则需要配置环境变量: 在环境系统变量Path中添加python的安装目录,比如:C:\Python35\Scripts;C:\Python35\,这个是安装在C盘的目录。 二、安装pip: https://pypi.python.org/pypi/pip 下载完成后解压,打开dos命令窗口进入刚才解压后的文件夹里面(如:D:\pip-9.0.1,这个是解压后的pip文件夹)输入如下信息: 输入如下信息后按回车键,进行安装,安装完后显示安装目录为:C:\Python35\Lib\site-packages\pip-9.0.1-py3.5.egg 再dos命令窗口输入:pip.exe按回车,如下图: 然后配置环境变量,在环境系统变量Path中添加C:\Python35\Lib\site-packages\pip-9.0.1-py3.5.egg(这个是安装在C盘的目录)。 再次打开打开IDLE(Python 3.6.2)输入import selenium按回车键,如下图: 如果没有找到selenium可……

网友NO.707818

解决python selenium3启动不了firefox的问题

selenium3.0之后的版本的就不支持直接打开火狐浏览器,启动火狐浏览器报错,如下图,要想运行就需要我们单独装上驱动。 3.0之前的版本,是可以直接打开火狐浏览器的。 解决办法: 1、首先下载最新版的火狐浏览器 2、下载合适的驱动,对应自己系统,下载地址https://github.com/mozilla/geckodriver/releases,解压文件把下载的驱动文件放在自己的驱动目录下边,我放在单独一个d盘的D:\driver目录下. 重新运行脚本即可。 以上这篇解决python selenium3启动不了firefox的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明