Scrapy+Selenium自动化获取个人CSDN文章质量分

前言

本文将介绍如何使用Scrapy和Selenium这两个强大的Python工具来自动获取个人CSDN文章的质量分数。我们将详细讨论Scrapy爬虫框架的使用,以及如何结合Selenium浏览器自动化工具来实现这一目标。无需手动浏览每篇文章,我们可以轻松地获取并记录文章的质量分数,从而更好地了解我们的博客表现。
CSDN文章质量分查询链接
Scrapy相关基础知识:
爬虫框架Scrapy学习笔记-1

爬虫框架Scrapy学习笔记-2

文章目录

    • 前言
    • 1. Scrapy的安装
    • 2. Scrapy的工作流程
      • 2.1 创建项目
      • 2.2 进入项目目录
      • 2.3 生成Spider
      • 2.4 调整Spider
      • 2.5 调整Settings配置
      • 2.6 运行Scrapy程序
      • 2.7 找URL
      • 2.8 查看处理 response,交给管道
    • 3. 使用Selenium获取质量分数
    • 总结

1. Scrapy的安装

首先,我们需要安装Scrapy。建议在单独的虚拟环境中进行安装,你可以使用Virtualenv环境或Conda环境。执行以下命令来安装Scrapy:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy==2.5.1
pip install pyopenssl==22.0.0
pip install cryptography==36.0.2 
scrapy version
scrapy version --verbose 

2. Scrapy的工作流程

Scrapy是一个强大的Python爬虫框架,我们可以按照以下步骤来使用它:

2.1 创建项目

使用以下命令创建一个Scrapy项目:

scrapy startproject csdn

2.2 进入项目目录

cd csdn

2.3 生成Spider

生成一个Spider来定义爬取规则:

scrapy genspider cs csdn.net

这将会生成一个Spider文件,你可以在其中定义你的爬取规则。

2.4 调整Spider

在生成的Spider文件中,你需要定义起始URL(start_urls)和如何解析数据的方法(通常是parse函数)。

例如:

import scrapyclass ExampleSpider(scrapy.Spider):name = 'cs'allowed_domains = ['csdn.net']start_urls = ['http://csdn.net/']def parse(self, response):pass

2.5 调整Settings配置

在项目目录中的settings.py文件中,你可以调整各种配置选项。

以下是一些需要调整的配置选项:

  • LOG_LEVEL:设置日志级别,你可以将其设置为"WARNING"以减少日志输出。
LOG_LEVEL = "WARNING"
  • ROBOTSTXT_OBEY:设置是否遵守Robots协议,如果你不希望爬虫遵守Robots协议,可以将其设置为False。
ROBOTSTXT_OBEY = False
  • ITEM_PIPELINES:打开管道以处理爬取的数据,你可以配置不同的管道来处理不同类型的数据。
ITEM_PIPELINES = {'csdn.pipelines.CsdnPipeline': 300,
}

2.6 运行Scrapy程序

使用以下命令来运行Scrapy程序:

scrapy crawl csdn

2.7 找URL

在这一步,我们需要找到用于获取文章数据的URL。可以通过以下步骤来找到URL:
在这里插入图片描述
我们可以先点开搜索按钮预设一个搜索值
然后在Fetch/XHR或JS中逐个点,加载出来就会在左侧被搜索到
在这里插入图片描述

这里我们最终在header中找到这个连接,我们会发现其实链接是通用的,你可以跳过上一步直接使用这个连接,只需要替换你的username

https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=qq_42531954

另外,这里page=1&size=20,当你的文章大于20篇,你可以调整size,这里我刚好有50篇,于是我调整size=50

2.8 查看处理 response,交给管道

import scrapyclass CsSpider(scrapy.Spider):name = 'cs'allowed_domains = ['csdn.net']start_urls = ['https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=50&businessType=blog&orderby=&noMore=false&year=&month=&username=qq_42531954']def parse(self, response):print(response.text)

分析response.text,发现返回值为字典
稍作处理后传递给管道

import scrapyclass CsSpider(scrapy.Spider):name = 'cs'allowed_domains = ['csdn.net']start_urls = ['https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=50&businessType=blog&orderby=&noMore=false&year=&month=&username=qq_42531954']def parse(self, response):# print(response.text)data_list = response.json()["data"]["list"]for data in data_list:url = data["url"]title = data["title"]yield {  # 宁典可以充当item -> dict"url": url,"title": title}
csdn/csdn/pipelines.py
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass CsdnPipeline:def process_item(self, item, spider):print("我是管道,我看到的东西是", item)with open("data.csv", mode="a", encoding="utf-8") as f:f.write(f"{item['url']},{item['title']}\n")return item

3. 使用Selenium获取质量分数

如果你的chromedriver出现问题,你可以从这里找到解决方案
自动化管理chromedriver-完美解决版本不匹配问题

以下是使用Selenium的代码示例:

import csv
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsoption = Options()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
option.add_argument('--headless')  # 启用无头模式driver = webdriver.Chrome(options=option)
# 用于存储CSV数据的列表
data = []
#
# 打开CSV文件并读取内容
with open('data.csv','r', encoding='utf-8') as csvfile:reader = csv.reader(csvfile)for row in reader:# 每行包括两个字段:链接和标题link, title = row# 将链接和标题作为元组添加到数据列表中data.append((link, title))# 使用浏览器访问网页
driver.get("https://www.csdn.net/qc")
for link,title in data:driver.find_element(By.CSS_SELECTOR, ".el-input__inner").send_keys(f"{link}",link)driver.find_element(By.CSS_SELECTOR, ".trends-input-box-btn").click()time.sleep(0.5)soc = driver.find_element(By.XPATH, '//*[@id="floor-csdn-index_850"]/div/div[1]/div/div[2]/p[1]').textprint(title,soc)time.sleep(1)
driver.quit()

这段代码是一个Python脚本,使用了CSV模块和Selenium库来自动化获取CSDN文章的质量分数。下面我将逐行详细解释这段代码的功能和作用:

  1. 导入必要的库:
import csv
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

这里导入了CSV模块(用于读取CSV文件)、time模块(用于添加延迟等待)、以及Selenium相关的模块和类。

  1. 配置Selenium选项:
option = Options()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
option.add_argument('--headless')  # 启用无头模式

这部分代码配置了Selenium的选项。其中,Options是用于配置Chrome浏览器的选项,add_experimental_option用于设置Chrome的实验性选项,以避免被检测为自动化程序。--disable-blink-features=AutomationControlled用于禁用某些自动化特性,而--headless则启用了无头模式,使得浏览器在后台运行,不会显示界面。

  1. 创建Chrome WebDriver实例:
driver = webdriver.Chrome(options=option)

这里创建了一个Chrome WebDriver实例,使用了上述配置选项。WebDriver将用于模拟浏览器操作。

  1. 创建一个空列表用于存储数据:
data = []

这个列表将用于存储从CSV文件中读取的数据。

  1. 打开CSV文件并读取内容:
with open('data.csv', 'r', encoding='utf-8') as csvfile:reader = csv.reader(csvfile)for row in reader:link, title = rowdata.append((link, title))

这部分代码使用open函数打开名为"data.csv"的CSV文件,并使用csv.reader来读取文件的内容。每一行都包括两个字段:链接和标题,这些数据被添加到之前创建的data列表中。

  1. 使用浏览器访问网页:
driver.get("https://www.csdn.net/qc")

这行代码使用WebDriver打开了CSDN网站的首页,准备开始搜索文章的质量分数。

  1. 迭代处理CSV文件中的每一行数据:
for link, title in data:driver.find_element(By.CSS_SELECTOR, ".el-input__inner").send_keys(f"{link}", link)driver.find_element(By.CSS_SELECTOR, ".trends-input-box-btn").click()time.sleep(0.5)soc = driver.find_element(By.XPATH, '//*[@id="floor-csdn-index_850"]/div/div[1]/div/div[2]/p[1]').textprint(title, soc)time.sleep(1)

在这个循环中,我们对CSV文件中的每一行数据执行以下操作:

  • 使用driver.find_element通过CSS选择器定位搜索框,并在搜索框中输入文章链接。
  • 使用driver.find_element定位搜索按钮,并模拟点击搜索按钮。
  • 延迟0.5秒以等待页面加载完毕。
  • 使用XPath表达式定位质量分数元素,并提取其文本内容。
  • 打印文章标题和质量分数。
  • 延迟1秒以确保不会频繁访问网站。
  1. 最后,使用driver.quit()关闭浏览器窗口,释放资源。

这段代码的主要作用是自动化地访问CSDN网站,搜索文章链接,提取文章的质量分数,并将结果打印出来。这对于批量获取文章质量分数非常有用,而无需手动一个个查看。
当然,我将为你添加前言、摘要和总结来完善这篇文章。

总结

通过本文的学习,你将掌握使用Scrapy和Selenium自动获取个人CSDN文章质量分数的技能。这将帮助你更好地了解你的博客表现,以及哪些文章受到了更多的关注和评价。

同时,你也学到了如何设置Scrapy爬虫项目,配置爬虫规则,以及如何处理数据。这些技能对于进行各种网络数据采集任务都是非常有用的。

希望本文对你的网络数据采集和分析工作有所帮助,让你能够更好地理解你的读者和观众。如果你有任何问题或疑问,欢迎提出,我们将竭诚为你提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140194.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL常见join关联查询分析

1、join关联查询七大类型结构图 2、建表语句 CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEINNODB AUTO_INCREMENT1 DEFAULT CHARSETutf8;CREATE TABLE t_emp (id…

Go 并发可视化解释 - sync.Mute

在学习 Go 编程语言时,您可能会遇到这句著名的格言:“不要通过共享内存来进行通信;相反,通过通信来共享内存。” 这句话构成了 Go 强大并发模型的基础,其中通道(channels)作为协程之间的主要通信…

搭建安信可小安派Windows 开发环境

搭建小安派Windows 开发环境 Ai-Pi-Eyes 系列是安信可开源团队专门为Ai-M61-32S设计的开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口,具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SP…

操作系统真象还原_访问vaddr对应的pte

须知: 只要开启了分页机制,不管物理地址还是虚拟地址在CPU面前都按照分页处理,也就是即便给出物理地址CPU也按虚拟地址对待。 为什么没有出现页目录表结构体,也没有页目录项结构体。页目录表在某一块内存中,页表也在某…

存储管理详解

目录 存储管理(1) 第一节 存储管理概述(内存管理) 一、存储体系 二、存储管理的任务 三、地址转换 存储管理(2) 第二节 分区管理方案 一、固定分区 二、可变分区 三、分区管理方案的优缺点 第…

docker openjdk:8-jdk-alpine 修改时区、添加字体

新建Dockerfile文件,制作新镜像 FROM openjdk:8-jdk-alpine 1、解决字体问题 RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* 2、解决时差问题 # 解决时差8小时问题ENV TZAsia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /et…

Docker部署Nacos注册中心

文章目录 一、部署MySQL数据库并导入Nacos初始化SQL二、部署Nacos注册中心三、验证Nacos 一、部署MySQL数据库并导入Nacos初始化SQL 1、准备工作 docker pull mysql:8.0.27 Pwd"/data/software/mysql" mkdir ${Pwd}/{data,logs} -p chmod 777 ${Pwd}/logs2、添加配…

metinfo_5.0.4 EXP Python脚本编写

文章目录 metinfo_5.0.4EXP编写SQL注入漏洞 metinfo_5.0.4EXP编写 SQL注入漏洞 漏洞点:/about/show.php?langcn&id22 http://10.9.75.142/metInfo_5.0.4/about/show.php?langcn&id22验证漏洞(数字型注入) 状态码区分正确与错误 做比较的时候不能采用…

【计算机网络笔记二】网络层

IP 地址分类和子网掩码 IPv4 地址—简称 IP 地址,IP 地址由 32 位比特组成 IP地址现在由因特网名字和数字分配机构 ICANN(Internet Corporation for Assigned Names and Numbers)进行分配,IP地址的作用:用于网络寻址&…

猴赛雷 ! 上次我见过这么厉害的安全测试实战演练还是上次!

01、概念介绍 1.1 xss XSS 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、 VBScript、Acti…

WebGL 计算平行光、环境光下的漫反射光颜色

目录 光照原理 光源类型 平行光 点光源 环境光 反射类型 漫反射 漫反射光颜色 计算公式 环境反射 环境反射光颜色 表面的反射光颜色(漫反射和环境反射同时存在时)计算公式 平行光下的漫反射 根据光线和法线方向计算入射角θ(以便…

Arduino驱动MMA7260三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 Arduino驱动MMA7260三轴加速度传感器芯片,可以应用到摩托车和汽车放倒报警、遥控航模、游戏手柄、人形机器人跌倒检测、硬盘冲击保护、倾斜度测量等场合。 1

hadoop测试环境sqoop使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Sqoop看这篇文章就够了_must contain $conditions in where clause._SoWhat1412的博客-CSDN博客 大数据环境 C:\Windows\System32\drivers\etc 修改ip和hostname的对应关系 1…

第75步 时间序列建模实战:多步滚动预测 vol-3(以决策树回归为例)

基于WIN10的64位系统演示 一、写在前面 上两期,我们讲了多步滚动预测的第两种策略: 对于重复的预测值,取平均处理。例如,(1,2,3)预测出3.9和4.5,(2,3,4)预测出5.2和6.…

关于安卓SVGA浅尝(一)svgaplayer库的使用

关于安卓SVGA浅尝(一)使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中…

工具及方法 - 二进制编辑软件

之前介绍过用Notepad和VSCode进行二进制文件编辑。 很多通用型的文本编辑器都会集成二进制文件编辑功能,或者使用插件等形式扩展此项功能。比如vi/vim等工具。 而且,作为文本编辑、二进制文件编辑一类的工具,数量众多,各有特色。…

面试官:为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

公众号 小册 这是我整理的学习资料,非常系统和完善,欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记📒 一、安全特性 在前文中,我们已经了解到HTTP在通信过程中存在以下问题&…

STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案

第 1 章 概述  技术特点  支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出(RJ45 接口),支持多组动态 PDO 分组和对象字典的自动映射,支持站 号 ID 的自动设置与保存,支持 SDO 的…

zemaxMIF曲线图

调制传递函数( Modulation Transfer Function,MTF )是用来形容光学系统成像质量的重要指标。 通过对光学系统像空间进行傅里叶变换,可以得到一张分析图表,来描述像面上对比度和空间频率之间的对应关系。 对比度&…

相机有俯仰角时如何将像素坐标正确转换到其他坐标系

一般像素坐标系转相机坐标系都是默认相机是水平的,没有考虑相机有俯仰角的情况,大致的过程是:像素坐标系统-->图像坐标系-->相机坐标系 ->世界坐标系或雷达坐标系: 像素坐标系 像素坐标系(u,v)是…