作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2851

1. 简单说明爬虫原理

答:从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。

2. 理解爬虫开发过程

1).简要说明浏览器工作原理;

答:简要说明浏览器工作原理,具体过程如下:

  1. 连接,服务器通过一个ServerSocket类对象对某端口进行监听,监听都之后进行连接,打开一个socket虚拟文件。
  2. 请求,创建与监理socket连接相关的流对象后,浏览器获取请求,为get请求,则从请求信息中获取所访问的html文件名,向服务器发送请求。
  3. 响应,服务器收到请求后,搜索相关的目录文件,若不存在,返回错误的信息。若存在,则读取html文件,进行加http头等处理响应给浏览器,浏览器解析html文件,若其中还包含图片,视频等资源,则浏览器再次访问web服务器,获取图片视频等,并对其进行组装显示给用户。

2).使用 requests 库抓取网站数据;

requests.get(url) 获取校园新闻首页html代码

import requests;
url='http://zsb.gzcc.cn/'
res=requests.get(url);
res.encoding='utf-8'
print(res.text)

结果如下图:

 

3).了解网页

写一个简单的html文件,包含多个标签,类,id

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试网站</title>
<style type="text/css">
.one div {
    font-size: 24px;
    font-weight: bold;
    color: #FFF;
}
.denglu {
    color: #C63;
}
.anniu {
    font-size: 18px;
    font-style: normal;
    color: #399;
}
.denglu #head p .denglu {
    font-size: 16px;
}
</style>
</head>

<body background="file:///C|/Users/Administrator/Desktop/timg.jpg">
<div class="one">
  <div align="center">欢迎使用本测试网站</div>
</div>
<div class="denglu"><hr align="center" />

  <div id="head">
    <p align="center"><span class="denglu">用户名</span><input name="name" type="text" />
    </p>
    <p align="center"> <span class="denglu">密  码:</span>
      <input name="password" type="password" />
    </p>
  </div>
  <div id="body"> 
    <div align="center">
     &nbsp; &nbsp; &nbsp;
      <input name="denglu" type="button" class="anniu" value="登录" />
      &nbsp;
      <input name="zhuce" type="button" class="anniu" value="注册" />
    </div>
  </div>
</div> 
</body>
</html>

外观如下:

 

4).使用 Beautiful Soup 解析网页;

通过BeautifulSoup(html_sample,'html.parser')把上述html文件解析成DOM Tree

select(选择器)定位数据

找出含有特定标签的html元素

找出含有特定类名的html元素

找出含有特定id名的html元素

 

import requests
import bs4
from bs4 import BeautifulSoup
with open(r'test.html','r',encoding='utf-8') as html:
    text=html.read()
soup=BeautifulSoup(text,'html.parser')
#特定标签的html元素
a=soup.select('p')[0].text
# 特定类名的html元素
b=soup.select('.one')[0].text
# 特定id名的html元素
c=soup.select('#head')[0].text
print(a,b,c)

运行结果如下:

 

3.提取一篇校园新闻的标题、发布时间、发布单位

url = ‘http://news.gzcc.cn/html/2018/xiaoyuanxinwen_1204/10615.html'

import requests
import bs4
from bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/2018/xiaoyuanxinwen_1204/10615.html'
res=requests.get(url)
res.encoding='utf-8'
soup=BeautifulSoup(res.text,'html.parser')     # 解析成DOM Tree
t = soup.select('.show-title')[0].text
for news in soup.select('div'):
    if len(news.select('.show-title'))>0:
        head=news.select('.show-title')[0].text  #获取新闻标题
        message=news.select('.show-info')[0].text  #获取发布信息
        print('标题:   '+ head)
        print('发布的相关单位及时间:  '+message)
        break

运行结果如下图: