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