前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSDN文章爬取前十博主文章并转换为md

CSDN文章爬取前十博主文章并转换为md

原创
作者头像
ruochen
修改2021-11-20 08:14:10
4310
修改2021-11-20 08:14:10
举报

#CSDN文章爬取前十博主文章并转换为md

CSDN爬取

python+selenium+parsel+tomd

tansty创建

代码地址:

**(1)CSS选择器** 需要先创建一个parsel.Selector对象 from parsel import Selector html 可以是请求某个网页的源码,也可以是html,xml格式的字符串 selector = Selector(html) 创建Selector对象之后就可以开始使用了 tags = selector.css(’.content’) 我们平时使用的css中,对某一个标签进行修饰时,使用的是 .class_attr 在这里也是如此 .content 就是指查询所有 class 为 content 的标签 查询的结果是一个特殊的对象,不能直接得到需要的数据 将css()函数查询到的结果转换为字符串或者列表,需要使用一个函数 • get() • getall()

**(2)属性提取**

代码语言:txt
复制
href\_value = selector.css('a::attr(href)').get()   #提取href标签的值

title=page.css(".title-article::text").get()      #提取文本内容

****2.selenium**** **选择元素的方法** find_element_by_class_name:根据class定位

find_element_by_css_selector:根据css定位

find_element_by_id:根据id定位

find_element_by_link_text:根据链接的文本来定位

find_element_by_name:根据节点名定位

find_element_by_partial_link_text:根据链接的文本来定位,只要包含在整个文本中即可

find_element_by_tag_name:通过tag定位

find_element_by_xpath:使用Xpath进行定位

PS:把element改为elements会定位所有符合条件的元素,返回一个List

比如:find_elements_by_class_name

返回的是web_element对象

****3.tomd**** text=tomd.Tomd(content).markdown 将获取的文章转换为markdown形式

二、代码展示

**1.获取一篇文章**

代码语言:txt
复制
#对一篇文章的爬取

def spider\_one\_csdn(title\_url):    # 目标文章的链接

    html=requests.get(url=title\_url,headers=head).text

    page=parsel.Selector(html)

    #创建解释器

    title=page.css(".title-article::text").get()

    title=filter\_str(title)

    print(title)

    content=page.css("article").get()

    content=re.sub("<a.\*?a>","",content)

    content = re.sub("<br>", "", content)

    #过滤a标签和br标签

    text=tomd.Tomd(content).markdown

    #转换为markdown 文件

    path = os.getcwd()  # 获取当前的目录路径

    file\_name = "./passage"

    final\_road = path + file\_name

    try:

        os.mkdir(final\_road)

        print('创建成功!')

    except:

        # print('目录已经存在或异常')

        pass

    with open(final\_road+r"./"+title+".md",mode="w",encoding="utf-8") as f:

        f.write("#"+title)

        f.write(text)

    time.sleep(1)

**2.获取博主所有文章**

代码语言:txt
复制
def get\_article\_link(user):

    #获取某个博主的所有文章

    page=1

    while True:

        link = "https://blog.csdn.net/{}/article/list/{}".format(user, page)

        print("现在爬取第", page, "页")

        html = requests.get(url=link, headers=head).text

        cel = parsel.Selector(html)

        name\_link = cel.css(".article-list h4 a::attr(href) ").getall()

        if not name\_link:

            break

            #没有文章就退出

        for name in name\_link:

            spider\_one\_csdn(name)

        page+=1

    time.sleep(1)

**3.获取博主名字**

代码语言:txt
复制
def nb\_bozhu():

    #获取前十博主的csdn名称

    driver=webdriver.Chrome()

    driver.implicitly\_wait(10)

    driver.get("https://blog.csdn.net/rank/writing\_rank")

    names=driver.find\_elements\_by\_xpath("//div[@class='rank-item-box d-flex align-items-center']//div[@class='name d-flex align-items-center']/h2/a")

    name\_list=[]

    for name in names:

        final\_name=name.get\_attribute("outerHTML")

        final\_name=re.sub('<a href="https://blog.csdn.net/',"",final\_name)

        final\_name=re.sub('">.\*</a>','',final\_name)

        name\_list.append(final\_name)

        print(final\_name)

    driver.quit()

    time.sleep(1)

    return name\_list

最终执行后会生成在程序所在目录下生成passage目录,里面有所有文章 <img src="https://img-blog.csdnimg.cn/20200902161039921.png#pic\_center" alt="在这里插入图片描述"> <img src="https://img-blog.csdnimg.cn/20200902161055550.png#pic\_center" alt="在这里插入图片描述">

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CSDN爬取
  • python+selenium+parsel+tomd
  • tansty创建
  • 二、代码展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档