理解爬虫原理

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

1. 简单说明爬虫原理

  • 向服务器发起请求
    通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器的响应。
  • 获取响应内容
    如果服务器正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML、JSON、二进制文件(如图片、视频等类型)。
  • 解析内容
    得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是JSON,可以直接转成JOSN对象进行解析,可能是二进制数据,可以保存或者进一步处理
  • 保存内容
    保存形式多样,可以保存成文本,也可以保存至数据库,或者保存成特定格式的文件。
  • 简要流程如下图所示

2. 理解爬虫开发过程

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

用户将自己的信息通过浏览器发送给服务器

#Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)

#ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。

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

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

import requests
from bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/xiaoyuanxinwen/'
res=requests.get(url)#获取校园新闻网中的内容
type(res)
res.encoding='utf-8'#改变显示的编码格式,避免乱码的产生
res.text#以文本的形式输出所爬取到的内容

运行结果:

 


 

3).了解网页

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

html_sample = ' \
<html> \
 <body> \
  <h1 id="title">HTML</h1> \
  <a href=" " class="link"> This is 简单的html代码</a >\
  <a href="# link2" class="link" qao=123> This is 另一个link</a >\
 </body> \
</html> '

 

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

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

soup = BeautifulSoup(res.text,'html.parser')#把上述html文件解析成DOM Tree

运行结果:

 

select(选择器)定位数据

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

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

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

# 找出标签为‘h1’的HTML元素,返回list
print(soup.select('h1')[0].text)
#  找出类名为‘link’的HTML元素
for i in range(len(soup.select('.link'))):
    print(soup.select('.link')[i].text)
# 找出含有特定id名的html元素
print(soup.select('#tbxpwd1')[0].text)

 运行结果:


 

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

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

此处选择的是校园新闻的其中一片url=http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0313/10979.html

for news in soup.select('li'):#对找到的列表进行遍历处理
    if len(news.select('.show-title'))>0:
        t=news.select('.show-title')[0].text#提取详细的信息,此处选取的是第一条列表的标题,链接网址,和发布单位与发布时间
        a=news.select('a')[0]['href']
        d=news.select('.show-info')[0].text
print(t,a,d)

运行结果:如要求所示的输出了新闻的标题、发布时间、和发布单位

 

posted @ 2019-03-25 18:18  zyda  阅读(157)  评论(0编辑  收藏  举报