用selenium爬取csdn博客文章,并用4种方法提取数据
为了方便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种方法提取数据相关推荐
- C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章
话不多说,先看程序运行截图: 注意: 本人没有看过爬虫相关的书籍,第一次写这种程序,这个程序是半屌子的,原理很简单,没有学习过爬虫的朋友,也可以写. 程序思路如下: 1.下载要爬网站的页面. 2.用正 ...
- 使用selenium爬取csdn博客
爬取的基本原理是:使用代码控制浏览器,让浏览器加载出页面后,把页面的源代码抓取下来 这篇博客的思路是: 基本环境搭建 核心代码与解释 工具类的代码与解释 一. 基本环境搭建 这里建议使用豆瓣源进行安装 ...
- 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图
以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...
- python爬虫爬取csdn博客专家所有博客内容
python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...
- 大屏监控系统实战(6)-爬虫初探:爬取CSDN博客之星年度总评选投票统计数据
一.介绍 我们先来做个简单的,我们的目标是爬取CSDN博客之星年度总评选的首页信息. 首页的地址:http://m234140.nofollow.ax.mvote.cn/wxvote/43ced329 ...
- 阮一峰老师博客爬取与博客文章存储持久化方式的思考
阮一峰老师博客爬取与博客文章存储持久化方式的思考 前言 博客文章存储持久化思考 文本形式存储 html形式存储 pdf形式存储 博客爬取思路 爬取思路一 爬取思路二 个人选择 pdf存储 结尾 前言 ...
- python实战系列之爬取CSDN博客之星2020年度排名情况(附源码)
前言 CSDN2020年度博客之星马上就要收尾了,你知道自己关注的博主排名实时变化吗?谁是你心目中的博客之星,让我们爬取各位博主的排名及各位博主的一些个人信息. 代码 直接上代码 # -*- codi ...
- Python爬虫小实践:使用BeautifulSoup+Request爬取CSDN博客的个人基本信息
好久都没有动Python了,自从在网上买了<Python网络数据采集>这本书之后一直没有时间写自己的小的Demo,今天再网络上无意中看见 http://www.cnblogs.com/mf ...
- Python爬虫:通过爬取CSDN博客信息,学习lxml库与XPath语法
目录 lxml库 lxml基本用法 解析XML文件 解析HTML文件 XPath 什么是XPath XPath语法 XPath实战 选取某节点的所有子孙节点 选取某节点的所有子节点 通过属性选取某节点 ...
最新文章
- B 站神曲damedane:精髓在于换脸,五分钟就能学会
- postgresql
- Scala语言编写的爬虫应用-爬取一部小说
- Django 进阶杂记
- 【20170926】【软工】第1次个人作业
- 漫谈数据库索引 | 脚印 footprint(转载)
- osg中添加自定义事件UserEvent
- Effective C++ 条款11:在operator=中处理自我赋值
- 【托管服务qin】WEB网站压力测试教程详解
- 人生苦短,不光要用 Python,还要在 VSCode 里用 | 原力计划
- css引用与html语义化
- python联合vrep_vrep-python 控制方法
- 计算机ps论文范文,ps论文范文
- When Does Self-Supervision Help Graph Convolutional Networks?
- gdata_YouTube GData API和Android
- 区块链去中心化通俗的理解是什么?
- Learning Enriched Features for Real Image Restoration and Enhancement Paddle模型复现93号(1)
- iOS--高德地图聚合demo
- 程序设计社团:在Dev-CPP中起用基础调试
- Ubuntu安装多用户免密登录Jupyterhub
热门文章
- 交换机组播风暴_cisco交换机风暴控制
- 京东联盟 很抱歉,账号无可用认证方式 的解决
- 使用 UI Flow 从O365管理界面下载报告时遇到的问题和解决办法
- 云栖小镇通勤车_云栖小镇通勤特快线即将上线!@上班族们,冬日上班新姿势快来Get!...
- ImageNet Classification with Deep Convolutional Neural Networks论文翻译——中英文对照
- Stata分位数回归I:理解边际效应和条件边际效应
- 2.一个简单的Servlet容器
- 在线计算机专业术语英译中翻译,计算机术语汉英翻译.ppt
- Matlab函数之prctile
- ts+v3 报错:‘Upload.vue‘ cannot be compiled under ‘--isolatedModules‘ because it is considered a global