用爬虫来爬取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读书会,面试算法讲座,创业活动,算法班(15年10月): 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一下列表,或许就会感觉我讲的就是个渣(还没有你自己理解的深入)。
- 用爬虫来爬取csdn大神的文章的url
- 抓取csdn博客的所有文章url
- git大神的文章
- 自动检测CSDN博客文章阅读次数的爬虫
- 收藏大神们的文章
- Hello Python!用python写一个抓取CSDN博客文章的简单爬虫
- 爬虫相应的文章
- 指定URL的网络爬虫。。
- 99年的大神寻路文章
- 公众号文章的爬虫
- CSDN的文章格式
- CSDN的第一遍文章
- CSDN上的一位oracle大神
- 希望CSDN的大神一定帮帮我
- 如何转载大神们的csdn博客
- 【Python脚本】-爬虫得到CSDN博客的文章访问量和评论量
- python爬虫CSDN文章抓取
- 用爬虫来爬取廖老师的python教程的url
- 字符串模式匹配:KMP算法讲解
- 2017CCPC网赛1004(HDU 6153)
- 20170819
- 170820 WarGames-Natas(21-25)
- word跨文档复制标题格式不兼容
- 用爬虫来爬取csdn大神的文章的url
- git 分享项目问题
- 在webStorm中配置ArcGIS API forJavaScript智能提示
- 背包问题
- Jobdu1444 More is better (并查集)
- JAVA单例设计模式简析
- PAT_A 1042. Shuffling Machine (20)
- NOIP2014无线发射器选址
- 2017年8月18日 星期五