Fork me on GitHub

爬虫初窥--用爬虫定向爬取网页的数据

最近在学习Python的爬虫,写点东西分享一下吧

前言

主要是前几天去俱乐部学长的博客里面看了下学长以前写的博文,然后看到了利用爬虫爬oj的数据的博文,正好现在在学习前端,感觉可能会有点帮助,于是决定在mooc上面自学爬虫。

参考连接
oj信息爬取
糗事百科爬虫

当然由于我比较菜,也才学了不到一个星期的样子,以前也没有接触过python这门语言,所以这篇blog可能写的质量有点差,但我还是想记录一下,以后等自己熟悉了之后在回来看这些东西,或许感受又不相同吧。


正文

这篇文章主要以mooc上的一个爬取一个大学排名网站里面大学的信息以及输出一些特定的信息为例子。

用到的库

1
request4+bs4

好吧目前我也只会用这两种库(菜的不行)。

安装库

管理员权限打开命令窗口。

1
2
pip install requests
pip install beautifulsoup4

获取url

这里网站的url是给定的。
url=’http://zuihaodaxue.cn/zuihaodaxuepaiming2016.html
只需要爬取这个网站的相关信息即可。

思路

step1:首先我们要得到这个网页有关大学排名网页的内容。
step2:提取出我们所需要的信息。
step3:将这些信息进行输出。

执行思路

1.定义一个函数来获取网页的内容,这里我们就可以利用一个框架了:

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "抓取失败"
def main()
url="http://www.baidu.com"
print(getHTMLText(url))
main()

2.定义一个函数对数据进行处理。
首先我们观察一些我们需要的数据所处于的标签。

如图

你会发现我们的所有数据实在一个tbody标签里面,然后所有数据在tbody的子节点的里面tr的td里面。这个时候就是时候表演一波真正的技术了。QAQ。

这个时候用我们的beautifulsoup库对html进行格式解压。
然后里面循环遍历所有我们要的信息的相关td标签的里面的数据即可。
最后存下来就可以啦。

3.输出函数。
输出利用pyhton的.format对我们的数据进行格式化输出就行了。

最后在主函数里面调用这些相应的函数就可以实现我们所需要的相应的功能即可了。

源码QAQ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r=requests.get(url,timeout=30) #30s的爬取时间限制
r.raise_for_status() #来观察异常消息
r.encoding=r.apparent_encoding
return r.text
except:
return "抓取失败"
def fillUnivlist(ulist,html):
soup=BeautifulSoup(html,"html.parser") #解析网页
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds=tr('td') #将所有的td标签都存在一个列表里面。
ulist.append([tds[0].string,tds[1].string,tds[2].string])
def printUnivlist(ulist,num):
print("{:^10}\t {:^6}\t {:^10}".format("排名","学校名称","分数"))
for i in range(num):
u=ulist[i]
print("{:^10}\t {:^6}\t {:^10}".format(u[0],u[1],u[2]))
def main(): #定义主函数
uinfo=[]
url='http://zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html=getHTMLText(url)
fillUnivlist(uinfo,html)
printUnivlist(uinfo,20) #这里我们只列举出20所大学的名称
main()

最后爬取的效果应该是这个样子的。QAQ。
如图

其实我觉得爬虫还挺简单的,而且还蛮好玩的,这篇写的不是很详细。因为最近我都没怎么用电脑学习啦,一般都是用手机在刷mooc然后用笔记本记笔记啦!
周围比较吵闹,电脑学习效率不是很高啦。。。哭唧唧。

总结

Our greatest glory consists not in never falling but in rising every time we fall.

-------------本文结束感谢您的阅读-------------