代码改变世界

理解爬虫原理

2019-03-27 13:39  CMis180kg  阅读(201)  评论(0编辑  收藏  举报

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

 

1. 简单说明爬虫原理

通用程序模拟浏览器请求站点的行为,采集信息,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。

第一步 :发送请求   第二步:获取响应内容   第三步:解析内容   第四步:保存数据

2. 理解爬虫开发过程

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

HTTP协议的工作原理:

a)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。

b)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0。文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。

c)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。

d)送GET命令: GET /mydir/index.html HTTP/1.0。主机名为www.mycomputer.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。

e)关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

 

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

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

import requests
url='https://www.sina.com.cn/'
res = requests.get(url)
print("status_code = {}".format(res.status_code))
type(res)
res.encoding='utf-8'
print(res.text)

执行结果如下图所示:

 

3).了解网页

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

html_sample = '''
<html>
  <head>
    <h1 id="title">标题</h1>
  </head>
  <body>
    <div>
      <p1>段落<p1><br>
      <a href="http://www.baidu.com" >百度</a>
    </div>
  </body>
</html>

 

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

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

select(选择器)定位数据

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

a=soup.select('h1')[0].text
print(a)

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

for i in range(len(soup.select('.link'))):
    b=soup.select('.link')[i].text
print(b)

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

c=soup.select('#title')[0].text
print(c)

 

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

import requests
from  bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/2019/meitishijie_0225/10895.html'
res=requests.get(url)
res.encoding='utf-8'
soup1=BeautifulSoup(res.text,'html.parser')
a=soup1.select('.show-title')[0].text
b=soup1.select('.show-info')[0].text
print(a,b)

 

执行效果如下图所示: