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

#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)属性提取**

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.获取一篇文章**

#对一篇文章的爬取

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.获取博主所有文章**

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.获取博主名字**

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=”在这里插入图片描述”>

正文完