为了方便susu学习selenium,下面代码用selenium爬取博客文章的标题和时间,并用selenium自带的解析,etree,bs4,scrapy框架自带的selector等4种方式来解析网页数据;

当然,请求库还可以使用urllib,requests;也可以用aiohttp来实现异步爬取,用Splash实现动态渲染页面的抓取。

# -*- encoding: utf-8 -*-from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsfrom lxml import etree
from bs4 import BeautifulSoup
from scrapy import Selectordef selenium_test(url):# 设置无头浏览器,字符编码,请求头等信息,防止反爬虫检测chrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('lang=zh_CN.UTF-8')UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'chrome_options.add_argument('User-Agent=' + UserAgent)browser = webdriver.Chrome(chrome_options=chrome_options)browser.get(url)print('用4种方式提取标题和时间:')# 解析数据 方式一:用selenium自带的解析title = browser.find_element_by_xpath('//h1[@class="title-article"]').textpublish_time = browser.find_element_by_xpath('//div[@class="bar-content"]/span[@class="time"]').textprint(' 方式一 用selenium自带的解析: ', title, publish_time)# 解析数据 方式二:用etreeselector = etree.HTML(browser.page_source)title = selector.xpath('//h1[@class="title-article"]/text()')[0]publish_time = selector.xpath('//div[@class="bar-content"]/span[@class="time"]/text()')[0]print(' 方式二 用etree解析:', title, publish_time)# 解析数据 方式三:用beautifulsoupsoup = BeautifulSoup(browser.page_source, 'lxml')title = soup.find('h1', {'class': 'title-article'}).textpublish_title = soup.find('div', {'class': 'bar-content'}).find('span', {'class': 'time'}).textprint(' 方式三:用beautifulsoup解析:', title, publish_title)# 解析数据 方式四:用scrapy框架中的选择器Selectorselector = Selector(text=browser.page_source)title = selector.xpath('//h1[@class="title-article"]/text()').extract_first()publish_time = selector.xpath('//div[@class="bar-content"]/span[@class="time"]/text()').extract_first()article_list = selector.xpath('//div[@class="markdown_views prism-atom-one-dark"]').extract()article = ''.join(article_list) if len(article_list) > 0 else Noneprint(' 方式四:用scrapy框架中的选择器Selector解析:', title, publish_time)# 可以把博客文章保存到本地,然后用浏览器打开,会发现博客文章和网页上的结构是一样的# with open('article.html', 'w') as f:#     f.write(article)selenium_test(url='https://blog.csdn.net/cui_yonghua/article/details/90512943')

执行结果如下图:

更全的代码已上传至github: https://github.com/cuiyonghua6/csdn_crawl

用selenium爬取csdn博客文章,并用4种方法提取数据相关推荐

  1. C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章

    话不多说,先看程序运行截图: 注意: 本人没有看过爬虫相关的书籍,第一次写这种程序,这个程序是半屌子的,原理很简单,没有学习过爬虫的朋友,也可以写. 程序思路如下: 1.下载要爬网站的页面. 2.用正 ...

  2. 使用selenium爬取csdn博客

    爬取的基本原理是:使用代码控制浏览器,让浏览器加载出页面后,把页面的源代码抓取下来 这篇博客的思路是: 基本环境搭建 核心代码与解释 工具类的代码与解释 一. 基本环境搭建 这里建议使用豆瓣源进行安装 ...

  3. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...

  4. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

  5. 大屏监控系统实战(6)-爬虫初探:爬取CSDN博客之星年度总评选投票统计数据

    一.介绍 我们先来做个简单的,我们的目标是爬取CSDN博客之星年度总评选的首页信息. 首页的地址:http://m234140.nofollow.ax.mvote.cn/wxvote/43ced329 ...

  6. 阮一峰老师博客爬取与博客文章存储持久化方式的思考

    阮一峰老师博客爬取与博客文章存储持久化方式的思考 前言 博客文章存储持久化思考 文本形式存储 html形式存储 pdf形式存储 博客爬取思路 爬取思路一 爬取思路二 个人选择 pdf存储 结尾 前言 ...

  7. python实战系列之爬取CSDN博客之星2020年度排名情况(附源码)

    前言 CSDN2020年度博客之星马上就要收尾了,你知道自己关注的博主排名实时变化吗?谁是你心目中的博客之星,让我们爬取各位博主的排名及各位博主的一些个人信息. 代码 直接上代码 # -*- codi ...

  8. Python爬虫小实践:使用BeautifulSoup+Request爬取CSDN博客的个人基本信息

    好久都没有动Python了,自从在网上买了<Python网络数据采集>这本书之后一直没有时间写自己的小的Demo,今天再网络上无意中看见 http://www.cnblogs.com/mf ...

  9. Python爬虫:通过爬取CSDN博客信息,学习lxml库与XPath语法

    目录 lxml库 lxml基本用法 解析XML文件 解析HTML文件 XPath 什么是XPath XPath语法 XPath实战 选取某节点的所有子孙节点 选取某节点的所有子节点 通过属性选取某节点 ...

最新文章

  1. B 站神曲damedane:精髓在于换脸,五分钟就能学会
  2. postgresql
  3. Scala语言编写的爬虫应用-爬取一部小说
  4. Django 进阶杂记
  5. 【20170926】【软工】第1次个人作业
  6. 漫谈数据库索引 | 脚印 footprint(转载)
  7. osg中添加自定义事件UserEvent
  8. Effective C++ 条款11:在operator=中处理自我赋值
  9. 【托管服务qin】WEB网站压力测试教程详解
  10. 人生苦短,不光要用 Python,还要在 VSCode 里用 | 原力计划
  11. css引用与html语义化
  12. python联合vrep_vrep-python 控制方法
  13. 计算机ps论文范文,ps论文范文
  14. When Does Self-Supervision Help Graph Convolutional Networks?
  15. gdata_YouTube GData API和Android
  16. 区块链去中心化通俗的理解是什么?
  17. Learning Enriched Features for Real Image Restoration and Enhancement Paddle模型复现93号(1)
  18. iOS--高德地图聚合demo
  19. 程序设计社团:在Dev-CPP中起用基础调试
  20. Ubuntu安装多用户免密登录Jupyterhub

热门文章

  1. 交换机组播风暴_cisco交换机风暴控制
  2. 京东联盟 很抱歉,账号无可用认证方式 的解决
  3. 使用 UI Flow 从O365管理界面下载报告时遇到的问题和解决办法
  4. 云栖小镇通勤车_云栖小镇通勤特快线即将上线!@上班族们,冬日上班新姿势快来Get!...
  5. ImageNet Classification with Deep Convolutional Neural Networks论文翻译——中英文对照
  6. Stata分位数回归I:理解边际效应和条件边际效应
  7. 2.一个简单的Servlet容器
  8. 在线计算机专业术语英译中翻译,计算机术语汉英翻译.ppt
  9. Matlab函数之prctile
  10. ts+v3 报错:‘Upload.vue‘ cannot be compiled under ‘--isolatedModules‘ because it is considered a global