通过Python+Selenium获取我的所有文章质量分

前言

大家好,我是空空star,本篇给大家分享一下《通过Python+Selenium获取我的所有文章质量分》

一、背景

目前在质量分查询界面只能一篇文章一篇文章查,如果我们想快速知道我们哪些文章质量分不是高质量,手动一篇一篇查太慢,借助Selenium代替手动,快速查出我们所有文章的质量分,然后再保存成excle。这样我们就可以很直观得看到哪些文章不是80分以上。

当然,也可以直接通过质量分接口去查询,接口做了HMAC认证,感兴趣的同学可以尝试。

二、设计

  1. 查询我的所有文章数量;
  2. 根据文章数量计算翻页数;
  3. 获取每页的文章url;
  4. 遍历页数,将每页的文章url添加到数组article_list中;
  5. 遍历article_list,通过Selenium去查质量分相关信息;
  6. 将查到的信息列分别放到对应的数组中;
  7. 通过pandas将质量分相关列信息写入excle。

三、环境准备

浏览器:本篇使用的是Chrome
Chrome驱动版本:110.0.5481.77
Python版本:Python3.8
selenium版本: 4.8.2
Selenium基础篇之环境准备

四、开发

1.查询文章数量

1.1请求url

1.2响应结果

1.3代码

def get_article_total(username):
    url = 'https://blog.csdn.net/community/home-api/v1/get-tab-total'
    headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'
    }
    params = {
    
    'username': username}
    response = requests.get(url, params=params, headers=headers)
    return response.json()['data']['blog']

2.获取每页文章列表

2.1请求url

2.2响应结果

通过请求参数,可以看到每次最多返回20个,那么翻页数就是:
max_page = math.ceil(blog_total/20)

3.获取所有文章url

3.1代码

def get_article_list(username):
    article_list = []
    url = 'https://blog.csdn.net/community/home-api/v1/get-business-list'
    headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'
    }
    blog_total = get_article_total(username)
    max_page = math.ceil(blog_total/20)
    for page in range(1, max_page+1):
        params = {
    
    'page': page, 'size': 20, 'businessType': 'blog', 'username': username}
        response = requests.get(url, params=params, headers=headers)
        for item in response.json()['data']['list']:
            article_list.append(item['url'])
    return article_list

4.保存excle方法

4.1代码

def save_excle(filename,post_time_list,title_list,score_list,remark_list,article_list):
    data = {
    
    '作者-发布时间': post_time_list, '文章标题': title_list, '质量分': score_list, '分数说明': remark_list, '文章url': article_list}
    df = pd.DataFrame(data)
    writer = pd.ExcelWriter(filename+'.xlsx')
    df.to_excel(writer, index=False)
    writer.save()

5.查询所有文章质量分并写入excle

5.1代码

def get_score(username):
    post_time_list = []
    article_list = get_article_list(username)
    title_list = []
    score_list = []
    remark_list = []
    cnt = 0
    for blog_url in article_list:
        cnt += 1
        driver.find_elements(By.CLASS_NAME, 'el-input__inner')[0].send_keys(blog_url)
        print(f'开始进行第{
      
      cnt}次查询')
        driver.find_elements(By.CLASS_NAME, 'trends-input-box-btn')[0].click()
        time.sleep(1)
        texts = driver.find_elements(By.TAG_NAME, 'p')
        title = driver.find_elements(By.TAG_NAME, 'span')[3].text
        post_time = driver.find_elements(By.TAG_NAME, 'span')[4].text
        post_time_list.append(post_time)
        title_list.append(title)
        score_list.append(texts[1].text)
        remark_list.append(texts[2].text)
    print('查询完毕!开始写入excle。')
    save_excle(username, post_time_list, title_list, score_list, remark_list, article_list)
    print('写入excle完毕!')

6.程序入口

只需要把username改成你的即可

6.1代码

if __name__ == '__main__':
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.get('https://www.csdn.net/qc')
    driver.maximize_window()
    get_score('weixin_38093452')
    driver.quit()

7.需要引入的模块

import math
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import requests
import pandas as pd

五、效果

总结

猜你喜欢

转载自blog.csdn.net/weixin_38093452/article/details/131344013