一、作者感悟
最近正在调整学习方向,不知道从哪入手,整天晕沉沉的总觉得要的学的东西太多,不知道从哪下手,这个爬虫是当时入门的爬虫,重新写一下思路当复习了
二、爬虫能做什么
每天都在思考这个问题,前几天一个朋友问我爬虫的问题,最后我觉得爬虫就是互联网上的"小偷",看好啥自己没有数据,那只能去‘偷’了
三、这次爬虫需要什么
基础的爬虫永远都是那么几样,requests,Beautifsoup和python 运行环境,然后在需要的就是不断学习的动力,这个爬虫比上次的字典翻译简单一点,主要就是静态网页爬虫,可以说是入门的入门了
四、开始爬虫
“http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html”爬取的连接
这里要先感谢一下之前的公司,说实话基础爬虫能上手这么快,都是之前公司的前辈们教我看的的控制台,超级感谢他们~
![](https://img.haomeiwen.com/i6692028/5f32dad6da9723ba.png)
打开控制台,定位一下,我们发现表格的连接都在这个table标签中了,这个就是我们这次解析的地方。
现在要做什么,要做的就是跟使用浏览器一样写一段输入网址的代码。我们就给用requests.get 方法模拟输入浏览器地址
import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
def getHtml(url):
try :
r = requests.get(url, timeout = 30)
if r.status_code == 200 :
r.encoding = r.apparent_encoding
return r.text
return None
except RequestException:
return "异常"
这里做了几个处理,
第一个是timeout 我只让 我程序有三十秒缓冲,三十秒内要是访问不到连接就超时。
第二个r.status_code获取网页的响应状态码,判断是否是200
第三个 做了异常
我们现在已经模拟浏览器访问了地址,并且已经获取了服务器返回的html,下一步我们要做处理
def parser_html(html):
soup = BeautifulSoup(html, 'html.parser')
for temp in soup.find('tbody').children:
try:
tds = temp('td')
yield [tds[0].text, tds[1].text, tds[2].text]
except:
continue
![](https://img.haomeiwen.com/i6692028/7f5670f1a4fa450c.png)
先找到tobody 标签,在找到所有子标签进行处理,这里如果出现异常就继续
运行一下代码
html = getHtml('http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html')
a= parser_html(html)
for i in a:
print(i)
![](https://img.haomeiwen.com/i6692028/7591becba71cfe12.png)
看了结果 ,中国16年前十的大学都在这了~
下面给出一段嵩天-[北京理工大学]-副教授源码,在处理上我的代码借鉴了老师的源码~
import requests
from bs4 import BeautifulSoup
import bs4
#1爬取网页
def GetHtml(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "异常"
#2提取内容、
def FullList(html,ulist):
soup= BeautifulSoup(html,'html.parser')
for temp in soup.find('tbody').children:
if isinstance(temp,bs4.element.Tag):
tds=temp('td')
ulist.append([tds[0].string,tds[1].string,tds[2].string])
def printUnivlist(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplt.format("排名", "学校名称", "总分", chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0], u[1], u[2], chr(12288)))
#3内容的输出
infos=[]
url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html=GetHtml(url)
FullList(html,infos)
printUnivlist(infos,20)
网友评论