理解爬虫原理

1. 简单说明爬虫原理

1:向服务器发起请求

通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器的响应。

2:获取响应内容
如果服务器正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML、JSON、二进制文件(如图片、视频等类型)。
3:解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是JSON,可以直接转成JOSN对象进行解析,可能是二进制数据,可以保存或者进一步处理
4:保存内容
保存形式多样,可以保存成文本,也可以保存至数据库,或者保存成特定格式的文件。

2. 理解爬虫开发过程

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

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

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

import requests
import bs4
from bs4 import BeautifulSoup

res = requests.get(url='http://news.gzcc.cn/html/xiaoyuanxinwen')
res.encoding = 'utf-8'
print(res.text)

 


3).了解网页

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

<div class="dowebok">

         <div class="logo"></div>

         <div class="form-item">

             <input id="username" type="text" autocomplete="off" placeholder="邮箱">

         </div>

         <div class="form-item">

             <input id="password" type="password" autocomplete="off" placeholder="登录密码">

         </div>

         <div class="form-item"><button id="submit">登 录</button></div>

         <div class="reg-bar">

             <a class="reg" href="javascript:">立即注册</a>

             <a class="forget" href="javascript:">忘记密码</a>

         </div>

     </div>

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

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

select(选择器)定位数据

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

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

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

 

from bs4 import BeautifulSoup

htmlfile = open('test.html', 'r', encoding='utf-8')
htmlhandle = htmlfile.read()
soup = BeautifulSoup(htmlhandle, "html.parser");

# 找出含有特定标签的html元素
print(soup.select("username"));
# 找出含有特定类名的html元素
print(soup.select("password"));
# 找出含有特定id名的html元素
print(soup.select("submit"));

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

url = 'http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.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')     
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

 

posted on 2019-03-27 21:37  朱志杰  阅读(111)  评论(0编辑  收藏  举报