最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

selenium+python如何爬取简书网站

来源:懂视网 责编:小采 时间:2020-11-27 14:12:58
文档

selenium+python如何爬取简书网站

selenium+python如何爬取简书网站:这篇文章介绍的内容是selenium+python如何爬取简书网站 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下页面加载逻辑当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成
推荐度:
导读selenium+python如何爬取简书网站:这篇文章介绍的内容是selenium+python如何爬取简书网站 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下页面加载逻辑当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成

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 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秒比较合理

看看效果

刷出了按钮

接下来就是不断点击按钮加载页面,继续加入刚才的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("
") except TypeError: pass

最终结果

简书文章

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("
    ") except TypeError: pass

    相关推荐:

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    selenium+python如何爬取简书网站

    selenium+python如何爬取简书网站:这篇文章介绍的内容是selenium+python如何爬取简书网站 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下页面加载逻辑当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成
    推荐度:
    标签: 网页 python 简书
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top