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.mzph.cn/news/89204.shtml

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

相关文章

查询PCIE设备的VID,DID,SVID,SDID

查询PCIE设备的VID,DID,SVID,SDID ( Vendor ID、 Device ID、Subsystem Vendor ID、Subsystem Device ID ) [rootlocalhost ~]# lspci -s 04:00.0 -xxxvvv 04:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)C…

Docker部署ElasticSearch数据库+analysis-ik分词器插件

文章目录 一、部署ElasticSearch数据库二、添加分词器插件(analysis-ik)三、测试ElasticSearch数据库analysis-ik分词器插件 一、部署ElasticSearch数据库 1、准备工作 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6 Pwd"/data/software/elasticse…

Casper Network 构建企业级区块链生态的野望

Casper Network 是基于 Layer1 且图灵完备 Wasm 的智能合约平台,它由唯一可操作的 CBC-Casper Proof-of-Stake (PoS) 共识算法(称为 Highway)支持,该网络是一个无需许可、去中心化的公共区块链。 Casper Network 主网在 2021 年 4…

架构案例-架构真题2016(四十)

(2016)嵌入式处理器是嵌入式系统的核心部件,一般可分为嵌入式微处理器(MPU)微控制器(MCU)、数字信号处理器(DSP)和片上系统(SOC)。以下叙述中&…

一篇文章让你熟悉unordered_map及其模拟实现

熟悉unordered_map及其模拟实现 unordered_map的定义1. unordered_map的模板定义2. unordered_map的成员类型 unordered_map构造函数unordered_map赋值运算符重载unordered_map容量函数(Capacity)unordered_map迭代器(Iterators)1…

慢性疼痛治疗服务公司Kindly MD申请700万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,慢性疼痛治疗服务公司Kindly MD近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(KDLY),Kindly MD计划通过…

通信协议:Uart的Verilog实现(下)

4、UART接收器 UART接收器负责接收串行比特流,去除起始位和停止位,并以并行格式将数据保存到与主机数据总线相连的寄存器里。接收器无法获得发送时钟,因此尽管数据以标准比特率到达,但数据未必与接收主机内的时钟同步。同步问题可…

面试算法13:二维子矩阵的数字之和

题目 输入一个二维矩阵,如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和?对于同一个二维矩阵,计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如,输入图2.1中的二维矩阵,以及左上角坐标…

python机器学习融合模型:Stacking与Blending(附代码)_论文_模型竞赛_企业建模

大家好,今天给大家总结归纳了python机器学习融合模型:Stacking与Blending(附代码)。 1 堆叠法Stacking 一套弱系统能变成一个强系统吗? 当你处在一个复杂的分类问题面前时,金融市场通常会出现这种情况&…

自定义热加载:如何不停机实现核心代码更新

文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

Mybatis学习笔记7 参数处理专题

Mybatis学习笔记6 使用时的一些小技巧_biubiubiu0706的博客-CSDN博客 1.单个简单类型参数 2.Map参数 3.实体类参数 4.多参数 5.Param注解(命名参数) 6.Param源码分析 建表 插入点数据 新建模块 pom.xml <?xml version"1.0" encoding"UTF-8"?&…

SpringBoot 学习(七)Swagger

7. Swagger 7.1 简介 便于前后端集成联调RestFul Api 文档在线生成工具 > Api 文档与 Api 定义同步更新直接运行&#xff0c;在线测试 Api 接口 7.2 springboot 集成 swagger (1) 导入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger…

2001-2021年上市公司基于Jones 修正模型的盈余管理测度(含原始数据+stata 计算代码)

2001-2021年上市公司基于Jones 修正模型的盈余管理测度&#xff08;含原始数据stata 计算代码&#xff09; 1、时间&#xff1a;2001-2021 年 3、范围&#xff1a;沪深 A 股上市公司 4、指标&#xff1a;经营活动现金流、总资产、净利润、总收入、固定资产、应收账款、盈余管…

如何快速做跨业务测试?

当业务任务多且人力资源不充足的情况下&#xff0c;不同业务的同学可能需要去不同的业务进行临时支援&#xff0c;可能在时间方面有长有短&#xff0c;但是如何迈出第一步是很多人需要关心的一件事。 本文以实际跨业务测试经验&#xff08;订单业务测试人员如何测试售后业务&a…

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTTP/2 简介⭐ 主要的改进和特点⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端…

梦想让生活得以忍受-寄语机器视觉工程师

我&#xff0c;曾梦想梦想走天涯&#xff0c;看看这世界的繁华&#xff0c;年少的心总有些轻狂&#xff0c;如今四海为家。 大家都听过这首歌&#xff0c;迎来很多打工人的共鸣&#xff0c;著名作家海明威曾说&#xff0c;“一个人可以被打败&#xff0c;但不可以被毁灭”&…

Web自动化测试 —— 如何进行Selenium页面数据及元素交互?啊哈

前言&#xff1a; Web自动化测试是一种常用的测试方式&#xff0c;通过在浏览器中模拟用户操作以及与页面元素的交互&#xff0c;可以有效地检验页面的功能性以及稳定性。Selenium是一款流行的Web自动化测试工具&#xff0c;在本篇文章中&#xff0c;我们将介绍如何使用Seleni…

Echarts 自适应不生效解决(CPK分析工具直方图为例)

示例代码为左上方的CPK分析直方图组件 <template><div ref="cpk" id="cpk" style="height: 300px; width: 100%"></div> </template><script> import * as echarts from "echarts"; import { deboun…

HarmonyOS开发:解决DevEco Studio低版本导入高版本项目运行失败问题

前言 基于DevEco Studio 4.0 Beta2&#xff0c;hvigorVersion为3.0.2&#xff0c;开发了一个项目&#xff0c;上传到了远程仓库&#xff0c;当同事下载后&#xff0c;却始终无法运行&#xff0c;频繁报错&#xff0c;由于API都是使用的9&#xff0c;第一感觉就是开发环境不同&a…

Qt: 鼠标形状设置

设置全局鼠标形状 设置完毕后&#xff0c;整个APP的任何窗体&#xff0c;包括Dialog中的鼠标形状都会被修改为设定类型&#xff0c;某一个控件设定的鼠标形状将被替换。一般不建议使用 QCursor cursor;//创建鼠标对象 cursor.setShape(Qt::CursorShape::ClosedHandCursor);//…