用爬虫来爬取csdn大神的文章的url

来源:互联网 发布:ipad刻字热门句子知乎 编辑:程序博客网 时间:2024/06/07 10:33

上一篇文章中爬虫来获取廖老师python教程的url并加入搜索url功能,这一篇文章会爬取csdn大神july的所有博客的url,并实现搜索功能就像下面这样

请输入你要查询的知识点:MachineMachine L & Deep Learninghttp://blog.csdn.net/v_JULY_v/article/category/1061301Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛:     http://blog.csdn.net/v_july_v/article/details/71598551GAN之父在NIPS 2016上做的报告:两个竞争网络的对抗(含译文下载):     http://blog.csdn.net/v_july_v/article/details/60618425如何从零起步学习AI:     http://blog.csdn.net/v_july_v/article/details/54561427手把手教你搭建caffe及手写数字识别(Ubuntu下且附mac、纯通俗教程):     http://blog.csdn.net/v_july_v/article/details/53086367教你从头到尾利用DQN自动玩flappy bird(全程命令提示,GPU+CPU版):     http://blog.csdn.net/v_july_v/article/details/52810219基于torch学汪峰写歌词、聊天机器人、图像着色/生成、看图说话、字幕生成:     http://blog.csdn.net/v_july_v/article/details/52796239没GPU也能玩梵高作画:Ubuntu tensorflow CPU版:     http://blog.csdn.net/v_july_v/article/details/52683959教你从头到尾利用DL学梵高作画:GTX 1070 cuda 8.0 tensorflow gpu版:     http://blog.csdn.net/v_july_v/article/details/52658965CNN笔记:通俗理解卷积神经网络:     http://blog.csdn.net/v_july_v/article/details/51812459通俗理解LDA主题模型:     http://blog.csdn.net/v_july_v/article/details/41209515从贝叶斯方法谈到贝叶斯网络:     http://blog.csdn.net/v_july_v/article/details/40984699从拉普拉斯矩阵说到谱聚类:     http://blog.csdn.net/v_july_v/article/details/40738211Adaboost 算法的原理与推导:     http://blog.csdn.net/v_july_v/article/details/40718799最大熵模型中的数学推导:     http://blog.csdn.net/v_july_v/article/details/40508465数据挖掘中所需的概率论与数理统计知识:     http://blog.csdn.net/v_july_v/article/details/8308762从K近邻算法、距离度量谈到KD树、SIFT+BBF算法:     http://blog.csdn.net/v_july_v/article/details/8203674[置顶]        支持向量机通俗导论(理解SVM的三层境界):     http://blog.csdn.net/v_july_v/article/details/7624837从决策树学习谈到贝叶斯分类算法、EM、HMM:     http://blog.csdn.net/v_july_v/article/details/7577684[置顶]        Machine Learning读书会,面试算法讲座,创业活动,算法班(1510月):     http://blog.csdn.net/v_july_v/article/details/7237351数据挖掘领域十大经典算法初探:     http://blog.csdn.net/v_july_v/article/details/6142146

先观察一下网页源码

<ul class="panel_body">                     <li>                    <a href="..." onclick="...">03.Algorithms(实现)</a><span>(9)</span>                </li>                 <li>                    <a href="..." onclick="...">01.Algorithms(研究)</a><span>(27)</span>                </li>                 <li>                    <a href="..." onclick="...">02.Algorithms(后续)</a><span>(22)</span>                </li>                 <li>                    <a href="..." onclick="...">04.Algorithms(讨论)</a><span>(1)</span>                </li>                ...</ul>

或许你会用find(“div”, class_=”panel_body”)来得到想要的标签,但是这样就大错特错了,因为网页源码的其它部分也用了ul class=”panel_body”并且在其下面存放的并不是关于分类的文章的url。获取分类文章的url的代码

chapter_tag = url_soup.find_all("ul", class_="panel_body")[5]'''5是我自己一个一个试出来的,第六个<ul class="panel_body"> 标签下面的<li>标签正好存放的是分类章节的url'''

根据博客文章的分类来计算总共需要多少个列表,并创建一个多维列表

L = []count = 0for i in chapter_tag.find_all("li"):    count +=1for i in range(count):    L.append([])

获取了博客文章分类的url之后先把文章分类的名字以及url存储到列表的第一个位置就像这样[['Machine L & Deep Learning'], ['Algorithms(实现)'],...]

for i in chapter_tag.find_all("li"):    text = i.find("a").get_text()    '''    获取的text是这样'04.Algorithms(讨论)'但是我们并不需要前缀    '''    handle_text = text.split('.')[1]    L[sign].append(handle_text)    chapter_url = 'http://blog.csdn.net' + i.find("a").get("href")    L[sign].append(chapter_url)    L_copy = L[sign]    handler_chapter_url(chapter_url, L_copy)    sign += 1

获取了文章分类的url之后,就要对url进行处理了(找到各个分类包含的所有文章的url)也不要忘了把当前使用的列表传入到url处理函数中。先观察一下跳转到文章分类中某一个分类的网页源码吧。(比如说进入到Algorithms(实现)这个的页面)

<div class="list_item article_item">        <div class="article_title">            <span class="ico ico_type_Original"></span>    <h1>        <span class="link_title"><a href="/v_july_v/article/details/6431001">        十四、第三章再续:快速选择SELECT算法的深入分析与实现                    </a>        </span>    </h1></div>

要用find_all(“div”, class_=”list_item article_item”).find_all(“span”)[1]来定位到文字叙述部分以及url部分。获取之后还要把文字叙述部分进行处理之后以及url储到列表中(存储到多维列表的哪一个位置就要看L_copy = L[sign]是在多维列表的哪一个位置了)

def handler_chapter_url(chapter_url, L_copy):    chapter_url_html  = urllib.request.urlopen(chapter_url)    chapter_url_soup = BeautifulSoup(chapter_url_html, 'html.parser')    for n in chapter_url_soup.find_all("div", class_="article_title"):        detial_tag = n.find_all("span")[1]        '''        对文字叙述部分进行处理,把换行符空白符啥的通通pass掉        '''        detial_name = detial_tag.get_text().replace('\n', '').replace('\s', '').strip()        detial_url = 'http://blog.csdn.net' + detial_tag.find("a").get("href")        L_copy.append(detial_name + ':     '  + detial_url)

所有关于url的操作已经完成了,接下来就要进行查询操作了。

def inquiry(s):    for i in range(sign):        if L[i][0].startswith(s):            for j in range(len(L[i])):                print(L[i][j])        else:            pass

根据输入的字符串来查找列表中存储的信息。最后是所有代码了。

import refrom bs4 import BeautifulSoupimport urllib.requestdef inquiry(s):    for i in range(sign):        if L[i][0].startswith(s):            for j in range(len(L[i])):                print(L[i][j])        else:            passdef handler_chapter_url(chapter_url, L_copy):    chapter_url_html  = urllib.request.urlopen(chapter_url)    chapter_url_soup = BeautifulSoup(chapter_url_html, 'html.parser')    for n in chapter_url_soup.find_all("div", class_="article_title"):        detial_tag = n.find_all("span")[1]        detial_name = detial_tag.get_text().replace('\n', '').replace('\s', '').strip()        detial_url = 'http://blog.csdn.net' + detial_tag.find("a").get("href")        L_copy.append(detial_name + ':     '  + detial_url)url = 'http://blog.csdn.net/v_JULY_v/article/details/6530142/'html = urllib.request.urlopen(url)url_soup = BeautifulSoup(html, 'html.parser')chapter_tag = url_soup.find_all("ul", class_="panel_body")[5]L = []count = 0for i in chapter_tag.find_all("li"):    count +=1for i in range(count):    L.append([])sign = 0for i in chapter_tag.find_all("li"):    text = i.find("a").get_text()    handle_text = text.split('.')[1]    L[sign].append(handle_text)    chapter_url = 'http://blog.csdn.net' + i.find("a").get("href")    L[sign].append(chapter_url)    L_copy = L[sign]    handler_chapter_url(chapter_url, L_copy)    sign += 1s = input('请输入你要查询的知识点:')inquiry(s)

运行结果

请输入你要查询的知识点:TAOPPTAOPP(编程艺术)http://blog.csdn.net/v_JULY_v/article/category/784066程序员编程艺术第四十一章~四十二章:荷兰国旗、矩阵相乘Strassen算法:     http://blog.csdn.net/v_july_v/article/details/18824517程序员编程艺术第三十九~四十章:最近公共祖先LCA、打印螺旋矩阵:     http://blog.csdn.net/v_july_v/article/details/18312089程序员编程艺术第三十八章:Hero在线编程判题、出题系统的演进与优化:     http://blog.csdn.net/v_july_v/article/details/17632221...

关于用列表来存取信息这一部分讲的比较模糊,其实你只需要print一下列表,或许就会感觉我讲的就是个渣(还没有你自己理解的深入)。

原创粉丝点击