前言:随着csdn的更新,许多机制是进行了提升,但是相对于以前而言相信大家还是更喜欢以前的版本吧

一.需要的包:

我们需要使用的有如下的包:

#文件操作
import os
#请求发送
import requests
#网页解析
from lxml import etree
#缓冲时间
import time
二.代码部分:

我们对于csdn新版本界面进行数据的爬取,新版本个人主页如下图所示:
python爬取csdn个人首页信息以及博客_爬虫
接下来我们进行书写方法:

def bolg( url , head ):
    # 状态码
    respone = requests.get(url , headers=head)
    print(respone)

查看状态码是否正常一般正常的在200-300之间,接下来查看网页中元素所在的位置:

我们在页面进行F12或者右击鼠标点击检查,然后我们找到我们头像所对应的位置,进行鼠标右击,点击copy,在二级菜单栏中选择copy xpath
python爬取csdn个人首页信息以及博客_request_02
然后在代码中进行书写规则:

 # 解析网页
 html = etree.HTML(respone.text)
 #头像
 img = html.xpath('//div/div[1]/div[2]/div[1]/div[1]/img')

然后其他的基本都是一样的操作:

# 解析网页
 html = etree.HTML(respone.text)
 #原创文章  作者排名  粉丝数量  
 data = html.xpath('//div/div[1]/div[2]/div[3]/ul/li/a/div')
 #被访问量  
 data1 = html.xpath('//div/div[1]/div[2]/div[3]/ul/li/div')
 #头像  
 img = html.xpath('//div/div[1]/div[2]/div[1]/div[1]/img')
 #用户名
 username = html.xpath('//div/div[1]/div[2]/div[2]/div[1]/div[1]')
 #简介
 introduction = html.xpath('//div/div[1]/div[2]/div[2]/div[2]/p')
 #文章
 content = html.xpath('//div/div[2]/div/div[2]/div/div[2]/div/div/div/article/a') 

但是有的用户是没有用户名的,那怎么办呢?这时候我们需要来进行判断:

 if len(introduction) > 0:
    f.write(f'用户简介:{(introduction[0].text).strip()}  ')
 else:
    f.write(f'用户简介:此用户很懒,暂时没有简介 ')
三.全部代码:

整体的代码如下,我们会把爬取到的数据写入我们的文件中,文件名就是我们的用户名:

import os
import requests
from lxml import etree
import time

def bolg( url , head ):
    # 状态码
    respone = requests.get(url , headers=head)
    print(respone)
    #状态码是否正常
    if respone.status_code >= 200 or respone.status_code < 300:
        try:
            # 开始时间
            time1 = time.time()
            # 解析网页
            html = etree.HTML(respone.text)
            #原创文章  作者排名  粉丝数量  
            data = html.xpath('//div/div[1]/div[2]/div[3]/ul/li/a/div')
            #被访问量  
            data1 = html.xpath('//div/div[1]/div[2]/div[3]/ul/li/div')
            #头像  
            img = html.xpath('//div/div[1]/div[2]/div[1]/div[1]/img')
            #用户名
            username = html.xpath('//div/div[1]/div[2]/div[2]/div[1]/div[1]')
            #简介
            introduction = html.xpath('//div/div[1]/div[2]/div[2]/div[2]/p')
            #文章
            content = html.xpath('//div/div[2]/div/div[2]/div/div[2]/div/div/div/article/a') 
            with open(f'{username[0].text}.txt', "a",encoding='utf-8') as f:
                f.write(f'用户头像:{img[0].attrib["src"]}\n用户名:{username[0].text}\n')
                if len(introduction) > 0:
                    f.write(f'用户简介:{(introduction[0].text).strip()}  ')
                else:
                    f.write(f'用户简介:此用户很懒,暂时没有简介 ')
                f.write(f'被访问量:{data1[0].text}   原创文章:{data[0].text}  作者排名:{data[2].text}  粉丝数量:{data[4].text}\n')
            x = 1
            for i in content:
                # 文章标题
                title = i.xpath('./div[1]/h4')
                # 内容简介
                center = i.xpath('./div[2]')
                # 原创/转载
                czzm = i.xpath('./div[3]/div[1]/div[1]')
                # 阅读
                read = i.xpath('./div[3]/div[1]/div[2]/span')
                # 评论
                talk = i.xpath('./div[3]/div[1]/div[3]/span')
                # 点赞
                good = i.xpath('./div[3]/div[1]/div[4]/span')
                # 发布时间
                date_list = i.xpath('./div[3]/div[2]/span')
                with open(f'{username[0].text}.txt', "a", encoding='utf-8') as f:
                    f.write(f'第: {x} 篇文章标题:{title[0].text}\n')
                    f.write(f'文章链接:{i.attrib["href"]}\n')
                    f.write(f'内容简介:{center[0].text}\n')
                    f.write(f'文章类型:{czzm[0].text} ')
                    f.write(f'阅读量:{read[0].text}   评论量:{talk[0].text}   点赞量:{good[0].text}   {date_list[0].text}{date_list[1].text}{date_list[2].text}\n')
                    print(f'正在写入第: {x} 篇文章,标题为:{title[0].text} ')
                    time.sleep(0.5)
                x += 1
                time.sleep(1)
        except Exception as e:
            print(f'错误信息:{repr(e.args)}')
        finally:
            time2 = time.time()
            print(f'写入完成,写入:{len(content)}条数据,耗时:{time2-time1}秒')
    else:
        print('请求异常,请稍候重试!')

if __name__ == '__main__':
    # 爬取的链接
    url = input('请输入您想要爬取的博主主页链接地址:')
    # 请求头
    head = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
    }
    bolg(url, head)
四.效果图:

python爬取csdn个人首页信息以及博客_爬虫_03
python爬取csdn个人首页信息以及博客_html_04
python爬取csdn个人首页信息以及博客_html_05
因为我们在爬取时候进行了时间的缓冲避免数据太快对服务器影响太大,所以耗时较长
python爬取csdn个人首页信息以及博客_爬虫_06
python爬取csdn个人首页信息以及博客_request_07