理解爬虫原理
作业要求: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)
运行结果:如要求所示的输出了新闻的标题、发布时间、和发布单位