返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫分析汇总
  • 215
分享到

Python爬虫分析汇总

2024-04-02 19:04:59 215人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录python爬虫分析一、程序说明二、数据爬取1、获取 CSDN 作者总榜数据2、获取收藏夹列表3、获取收藏数据4、爬虫程序完整代码5、爬取数据结果三、数据分析及可视化python

python爬虫分析

前言:

计算机行业的发展太快了,有时候几天不学习,就被时代所抛弃了,因此对于我们程序员而言,最重要的就是要时刻紧跟业界动态变化,学习新的技术,但是很多时候我们又不知道学什么好,万一学的新技术并不会被广泛使用,太小众了对学习工作也帮助不大,这时候我们就想要知道大佬们都在学什么了,跟着大佬学习走弯路的概率就小很多了。现在就让我们看看C站大佬们平时都收藏了什么,大佬学什么跟着大佬的脚步就好了!

一、程序说明

通过爬取 “CSDN” 获取全站排名靠前的博主的公开收藏夹,写入 csv 文件中,根据所获取数据分析领域大佬们的学习趋势,并通过可视化的方式进行展示。

二、数据爬取

使用 requests 库请求网页信息,使用 BeautifulSoup4 JSON 库解析网页。

1、获取 CSDN 作者总榜数据

首先,我们需要获取 CSDN 中在榜的大佬,获取他/她们的相关信息。由于数据是动态加载的 (因此使用开发工具,在网络选项卡中可以找到请求的 jsON 数据:

观察请求链接:


https://blog.csdn.net/phoenix/WEB/blog/all-rank?page=0&pageSize=20
Https://blog.csdn.net/phoenix/web/blog/all-rank?page=1&pageSize=20
...

可以发现每次请求 JSON 数据时,会获取20个数据,为了获取排名前100的大佬数据,使用如下方式构造请求:


url_rank_pattern = "https://blog.csdn.net/phoenix/web/blog/all-rank?page={}&pageSize=20"

for i in range(5):
    url = url_rank_pattern.fORMat(i)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')

请求得到 Json 数据后,使用 json 模块解析数据(当然也可以使用 re 模块,根据自己的喜好选择就好了),获取用户信息,从需求上讲,这里仅需要用户 userName,因此仅解析 userName 信息,也可以根据需求获取其他信息:


userNames = []
information = json.loads(str(soup))
for j in information['data']['allRankListItem']:
    # 获取id信息
    userNames.append(j['userName'])

2、获取收藏夹列表

获取到大佬的 userName 信息后,通过主页来观察收藏夹列表的请求方式,本文以自己的主页为例(给自己推广一波),分析方法与上一步类似,在主页中切换到“收藏”选项卡,同样利用开发者工具的网络选项卡:

观察请求收藏夹列表的地址:


https://blog.csdn.net/commUnity/home-api/v1/get-favorites-created-list?page=1&size=20&noMore=false&blogUsername=LOVEmy134611

可以看到这里我们上一步获取的 userName 就用上了,可以通过替换 blogUsername 的值来获取列表中大佬的收藏夹列表,同样当收藏夹数量大于20时,可以通过修改 page 值来获取所有收藏夹列表:


collections = "https://blog.csdn.net/community/home-api/v1/get-favorites-created-list?page=1&size=20&noMore=false&blogUsername={}"
for userName in userNames:
    url = collections.format(userName)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')

请求得到 Json 数据后,使用 json 模块解析数据,获取收藏夹信息,从需求上讲,这里仅需要收藏夹 id,因此仅解析 id 信息,也可以根据需求获取其他信息(例如可以获取关注人数等信息,找到最受欢迎的收藏夹):


file_id_list = []
information = json.loads(str(soup))
# 获取收藏夹总数
collection_number = information['data']['total']
# 获取收藏夹id
for j in information['data']['list']:
    file_id_list.append(j['id'])

这里大家可能会问,现在 CSDN 不是有新旧两种主页么,请求方式能一样么?答案是:不一样,在浏览器端进行访问时,旧版本使用了不同的请求接口,但是我们同样可以使用新版本的请求方式来进行获取,因此就不必区分新、旧版本的请求接口了,获取收藏数据时情况也是一样的。

3、获取收藏数据

最后,单击收藏夹展开按钮,就可以看到收藏夹中的内容了,然后同样利用开发者工具的网络选项卡进行分析:

观察请求收藏夹的地址:


https://blog.csdn.net/community/home-api/v1/get-favorites-item-list?blogUsername=LOVEmy134611&folderId=9406232&page=1&pageSize=200

可以看到刚刚获取的用户 userName 和收藏夹 id 就可以构造请求获取收藏夹中的收藏信息了:


file_url = "https://blog.csdn.net/community/home-api/v1/get-favorites-item-list?blogUsername={}&folderId={}&page=1&pageSize=200"
for file_id in file_id_list:
    url = file_url.format(userName,file_id)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')

最后用 re 模块解析:


    user = user_dict[userName]
    user = preprocess(user)
    # 标题
    title_list  = analysis(r'"title":"(.*?)",', str(soup))
    # 链接
    url_list = analysis(r'"url":"(.*?)"', str(soup))
    # 作者
    nickname_list = analysis(r'"nickname":"(.*?)",', str(soup))
    # 收藏日期
    date_list = analysis(r'"dateTime":"(.*?)",', str(soup))
    for i in range(len(title_list)):
        title = preprocess(title_list[i])
        url = preprocess(url_list[i])
        nickname = preprocess(nickname_list[i])
        date = preprocess(date_list[i])

4、爬虫程序完整代码


import time
import requests
from bs4 import BeautifulSoup
import os
import json
import re
import csv

if not os.path.exists("col_infor.csv"):
    #创建存储csv文件存储数据
    file = open('col_infor.csv', "w", encoding="utf-8-sig",newline='')
    csv_head = csv.writer(file)
    #表头
    header = ['userName','title','url','anthor','date']
    csv_head.writerow(header)
    file.close()

headers = {
    'User-Agent':'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

def preprocess(string):
    return string.replace(',',' ')

url_rank_pattern = "https://blog.csdn.net/phoenix/web/blog/all-rank?page={}&pageSize=20"

userNames = []
user_dict = {}
for i in range(5):
    url = url_rank_pattern.format(i)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    information = json.loads(str(soup))
    for j in information['data']['allRankListItem']:
        # 获取id信息
        userNames.append(j['userName'])
        user_dict[j['userName']] = j['nickName']

def get_col_list(page,userName):
    collections = "https://blog.csdn.net/community/home-api/v1/get-favorites-created-list?page={}&size=20&noMore=false&blogUsername={}"
    url = collections.format(page,userName)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    information = json.loads(str(soup))
    return information

def analysis(item,results):
    pattern = re.compile(item, re.I|re.M)
    result_list = pattern.findall(results)
    return result_list

def get_col(userName, file_id, col_page):
    file_url = "https://blog.csdn.net/community/home-api/v1/get-favorites-item-list?blogUsername={}&folderId={}&page={}&pageSize=200"
    url = file_url.format(userName,file_id, col_page)
    #声明网页编码方式
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    user = user_dict[userName]
    user = preprocess(user)
    # 标题
    title_list  = analysis(r'"title":"(.*?)",', str(soup))
    # 链接
    url_list = analysis(r'"url":"(.*?)"', str(soup))
    # 作者
    nickname_list = analysis(r'"nickname":"(.*?)",', str(soup))
    # 收藏日期
    date_list = analysis(r'"dateTime":"(.*?)",', str(soup))
    for i in range(len(title_list)):
        title = preprocess(title_list[i])
        url = preprocess(url_list[i])
        nickname = preprocess(nickname_list[i])
        date = preprocess(date_list[i])
        if title and url and nickname and date:
            with open('col_infor.csv', 'a+', encoding='utf-8-sig') as f:
                f.write(user + ',' + title + ',' + url + ',' + nickname + ',' + date  + '\n')

    return information

for userName in userNames:
    page = 1
    file_id_list = []
    information = get_col_list(page, userName)
    # 获取收藏夹总数
    collection_number = information['data']['total']
    # 获取收藏夹id
    for j in information['data']['list']:
        file_id_list.append(j['id'])
    while collection_number > 20:
        page = page + 1
        collection_number = collection_number - 20
        information = get_col_list(page, userName)
        # 获取收藏夹id
        for j in information['data']['list']:
            file_id_list.append(j['id'])
    collection_number = 0

    # 获取收藏信息
    for file_id in file_id_list:
        col_page = 1
        information = get_col(userName, file_id, col_page)
        number_col = information['data']['total']
        while number_col > 200:
            col_page = col_page + 1
            number_col = number_col - 200
            get_col(userName, file_id, col_page)
    number_col = 0

5、爬取数据结果

展示部分爬取结果:

三、数据分析及可视化

最后使用 Wordcloud 库,绘制词云展示大佬收藏。


from os import path
from PIL import Image
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS
import pandas as pd
import matplotlib.ticker as ticker
import numpy as np
import math
import re

df = pd.read_csv('col_infor.csv', encoding='utf-8-sig',usecols=['userName','title','url','anthor','date'])

place_array = df['title'].values
place_list = ','.join(place_array)
with open('text.txt','a+') as f:
    f.writelines(place_list)

###当前文件路径
d = path.dirname(__file__)

# Read the whole text.
file = open(path.join(d, 'text.txt')).read()
##进行分词
#停用词
stopwords = ["的","与","和","建议","收藏","使用","了","实现","我","中","你","在","之"]
text_split = jieba.cut(file)  # 未去掉停用词的分词结果   list类型

#去掉停用词的分词结果  list类型
text_split_no = []
for word in text_split:
    if word not in stopwords:
        text_split_no.append(word)
#print(text_split_no)

text =' '.join(text_split_no)
#背景图片
picture_mask = np.array(Image.open(path.join(d, "path.jpg")))
stopwords = set(STOPWORDS)
stopwords.add("said")
wc = WordCloud(  
    #设置字体,指定字体路径
    font_path=r'C:\Windows\Fonts\simsun.ttc', 
    # font_path=r'/usr/share/fonts/wps-office/simsun.ttc', 
    background_color="white",   
    max_words=2000,   
    mask=picture_mask,  
    stopwords=stopwords)  
# 生成词云
wc.generate(text)

# 存储图片
wc.to_file(path.join(d, "result.jpg"))

到此这篇关于Python爬虫分析汇总的文章就介绍到这了,更多相关Python爬虫内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python爬虫分析汇总

本文链接: https://www.lsjlt.com/news/134738.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python爬虫分析汇总
    目录Python爬虫分析一、程序说明二、数据爬取1、获取 CSDN 作者总榜数据2、获取收藏夹列表3、获取收藏数据4、爬虫程序完整代码5、爬取数据结果三、数据分析及可视化Python...
    99+
    2024-04-02
  • Python爬虫练习汇总
    目录一、 软件配置二、爬取南阳理工OJ题目(一)页面分析(二)代码编写三、爬取学校信息通知(一)页面分析(二)代码编写一、 软件配置 安装必备爬虫环境软件: python 3.8pi...
    99+
    2024-04-02
  • python编写简单爬虫资料汇总
      爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2、BeautifulSoup实现简单爬虫,scrapy也有实现过。最近想更好的学习爬虫,那么就尽可能的做记录吧。这篇博客就我今天的一个学习过...
    99+
    2022-06-04
    爬虫 简单 资料
  • 一些常用的Python爬虫技巧汇总
    Python爬虫:一些常用的爬虫技巧总结 爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。 1、基本抓取网页 get方法 import urllib2 url "http://w...
    99+
    2022-06-04
    爬虫 常用 技巧
  • Python爬虫案例分析
    本篇内容介绍了“Python爬虫案例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、论述这几个案例以前是给一些想进入Pyt...
    99+
    2023-06-17
  • Python爬虫实例分析
    今天小编给大家分享一下Python爬虫实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。环境搭建既然用python,那么...
    99+
    2023-06-03
  • Python爬虫基础之爬虫的分类知识总结
    目录一、通用爬虫二、搜索引擎的局限性三、Robots协议四、请求与相应一、通用爬虫 通用网络爬虫是搜索引擎抓取系统(Baidu、Google、Sogou等)的一个重要组成部分。主要目...
    99+
    2024-04-02
  • Python爬虫与数据分析之爬虫技能:u
    专栏目录: Python爬虫与数据分析之python教学视频、python源码分享,python Python爬虫与数据分析之基础教程:Python的语法、字典、元组、列表 Python爬虫与数据分析之进阶教程:文件操作、lambda表达...
    99+
    2023-01-31
    爬虫 技能 数据
  • nodejs爬虫遇到的乱码问题汇总
    上一篇文章中使用nodejs程序解析了网页编码为gbk,gb2312,以及utf-8的情况,这里面有三种特殊的乱码情况需要单独的说明一下. 1,网页编码为utf-8,但是解析为乱码,代表网站为www.guo...
    99+
    2022-06-04
    爬虫 乱码 nodejs
  • python爬虫中xpath实例分析
    这篇文章主要介绍“python爬虫中xpath实例分析”,在日常操作中,相信很多人在python爬虫中xpath实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python爬虫中xpath实例分析”的疑...
    99+
    2023-06-29
  • Python网络爬虫举例分析
    这篇文章主要讲解了“Python网络爬虫举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python网络爬虫举例分析”吧!先来看一段简单的代码。import requests...
    99+
    2023-06-02
  • Python爬虫数据举例分析
    本篇内容介绍了“Python爬虫数据举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!获取数据打开斗鱼直播界面,连续点击翻页Networ...
    99+
    2023-06-02
  • 怎么用Python爬虫分析App
    这篇文章主要讲解了“怎么用Python爬虫分析App”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python爬虫分析App”吧!1 分析背景之前我们使用了 Scrapy 爬取并分析了...
    99+
    2023-06-02
  • Python Ajax爬虫方法案例分析
    今天小编给大家分享一下Python Ajax爬虫方法案例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 抓...
    99+
    2023-06-29
  • Python爬虫突破反爬虫机制知识点总结
    1、构建合理的HTTP请求标头。 HTTP的请求头是一组属性和配置信息,当您发送一个请求到网络服务器时。因为浏览器和Python爬虫发送的请求头不同,反爬行器很可能会被检测到。 2、...
    99+
    2024-04-02
  • Python爬虫教程-34-分布式爬虫介
    Python爬虫教程-34-分布式爬虫介绍 分布式爬虫在实际应用中还算是多的,本篇简单介绍一下分布式爬虫 什么是分布式爬虫 分布式爬虫就是多台计算机上都安装爬虫程序,重点是联合采集。单机爬虫就是只在一台计算机上的爬虫。 其实搜索引擎...
    99+
    2023-01-30
    爬虫 分布式 教程
  • Python爬虫-01:爬虫的概念及分类
    目录 # 1. 为什么要爬虫 2. 什么是爬虫? 3. 爬虫如何抓取网页数据? # 4. Python爬虫的优势? ...
    99+
    2023-01-30
    爬虫 概念 Python
  • Python爬虫——Python 岗位分
    前两篇我们分别爬取了糗事百科和妹子图网站,学习了 Requests, Beautiful Soup 的基本使用。不过前两篇都是从静态 HTML 页面中来筛选出我们需要的信息。这一篇我们来学习下如何来获取 Ajax 请求返回的结果。 欢迎关...
    99+
    2023-01-30
    爬虫 岗位 Python
  • ChatGPT爬虫实例分析
    本篇内容主要讲解“ChatGPT爬虫实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ChatGPT爬虫实例分析”吧!思考问题域我要写一个爬虫,把ChatGPT上我的数据都爬下来,首先想想我...
    99+
    2023-07-05
  • Python爬虫基础入门实例分析
    这篇文章主要介绍“Python爬虫基础入门实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python爬虫基础入门实例分析”文章能帮助大家解决问题。      &...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作