理解爬虫原理 理解爬虫原理

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

 

一、简单说明爬虫原理

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

二、理解爬虫开发过程

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

浏览器工作原理的实质就是实现http协议的通讯,具体过程如下:

HTTP通信的流程,大体分为三个阶段:

(1)连接:服务器通过一个ServerSocket类对象对8000端口进行监听,监听到之后建立连接,打开一个socket虚拟文件。

(2)请求:创建与建立socket连接相关的流对象后,浏览器获取请求,为GET请求,则从请求信息中获取所访问的HTML文件名,向服务器发送请求。

(3)应答:服务收到请求后,搜索相关目录文件,若不存在,返回错误信息;若存在,则将html文件进行加HTTP头等处理后响应给浏览器,浏览器解析html文件,若其中还包含图片,视频等请求,则浏览器再次访问web服务器,异常获取图片视频等,并对其进行组装显示出来。

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

代码如下:

1 import requests
2 url='http://www.chinaedu.edu.cn/'
3 #网络资源获取
4 res=requests.get(url)
5 res.encoding = 'utf-8'
6 print(res.text)
requests

运行截图:

理解爬虫原理
理解爬虫原理

3.了解网页

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

代码如下:

 1 <body>
 2     <div id="wrapper">
 3         <header id="header">
 4             <div class="content">
 5                 <div class="inner">
 6                     <h1>这是一个头部标签</h1>
 7                     <p>然后是P标签里面有a标签,也就是点击以后会跳转到一个链接 <a href="https://www.sina.com.cn/"><br>跳转到新浪网</a> 里面<br> </p>
 8                 </div>
 9             </div>
10             <nav class="use-middle">
11                 <ul>
12                     <li><a id="intro">第一</a></li>
13                     <li><a id="work">第二</a></li>
14                     <li><a id="about">第三</a></li>
15                     <li><a id="contact">第四</a></li>
16                 </ul>
17             </nav>
18         </header>
19     </div>
20 </body>
html

运行截图:

理解爬虫原理
理解爬虫原理

4.使用 Beautiful Soup 解析网页:

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

select(选择器)定位数据

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

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

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

代码如下

 1 from bs4 import BeautifulSoup
 2 with open(r'test.html','r',encoding='utf-8') as f:
 3     text=f.read()
 4 soup=BeautifulSoup(text,'html.parser')
 5 #特定标签的html元素
 6 a=soup.select('li')[2].text
 7 # 特定类名的html元素
 8 b=soup.select('.inner')[0].text
 9 # 特定id名的html元素
10 c=soup.select('#intro')[0].text
11 print(a,b,c)
Beautiful Soup

运行截图:

理解爬虫原理
理解爬虫原理

 

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

url = 'http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'

代码如下: 

 1 import requests
 2 from bs4 import BeautifulSoup
 3 url='http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'
 4 res = requests.get(url)
 5 res.encoding = 'utf-8'
 6 res.text
 7 soup = BeautifulSoup(res.text,'html.parser')
 8 title = soup.select('.show-title')[0].text
 9 info = soup.select('.show-info')[0].text
10 list = info.split()
11 del list[-1]
12 for i in list:
13     print(i)
提取

运行截图:

理解爬虫原理
理解爬虫原理