一 爬虫
![](https://img2018.cnblogs.com/blog/1730057/201912/1730057-20191202173724155-1119672608.png)
1、什么是互联网?
互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样
2、互联网建立的目的?
互联网的核心价值在于数据的共享/传递:数据是存放于一台台计算机上的,而将计算机互联到一起的目的就是为了能够方便彼此之间的数据共享/传递,否则你只能拿U盘去别人的计算机上拷贝数据了。
3、什么是上网?爬虫要做的是什么?
我们所谓的上网便是由用户端计算机发送请求给目标计算机,将目标计算机的数据下载到本地的过程。
只不过,用户获取网络数据的方式是:
1.浏览器提交请求->下载网页代码->解析/渲染成页面。
而爬虫程序要做的就是:
2.模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中
1与2的区别在于: 我们的爬虫程序只提取网页代码中对我们有用的数据
4、爬虫
1.爬虫的定义:
向网站发起请求,获取资源后分析并提取有用数据的程序
2.爬虫的价值
互联网中最有价值的便是数据,比如天猫商城的商品信息,链家网的租房信息,雪球网的证券投资信息等等,这些数据都代表了各个行业的真金白银,可以说,谁掌握了行业内的第一手数据,谁就成了整个行业的主宰,如果把整个互联网的数据比喻为一座宝藏,那我们的爬虫课程就是来教大家如何来高效地挖掘这些宝藏,掌握了爬虫技能,你就成了所有互联网信息公司幕后的老板,换言之,它们都在免费为你提供有价值的数据。
爬虫的分类
1.通用爬虫
通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 简单来讲就是尽可能的;把互联网上的所有的网页下载下来,放到本地服务器里形成备分,在对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。
2.聚焦爬虫
聚焦爬虫是根据指定的需求抓取网络上指定的数据。例如:获取豆瓣上电影的名称和影评,而不是获取整张页面中所有的数据值。
2.1 robots协议
如果自己的门户网站中的指定页面中的数据不想让爬虫程序爬取到的话,那么则可以通过编写一个robots.txt的协议文件来约束爬虫程序的数据爬取。robots协议的编写格式可以观察淘宝网的robots(访问www.taobao.com/robots.txt即可)。但是需要注意的是,该协议只是相当于口头的协议,并没有使用相关技术进行强制管制,所以该协议是防君子不防小人。但是我们在学习爬虫阶段编写的爬虫程序可以暂时先忽略robots协议。
Allow:允许的
Disallow:不允许的
User-agent: Baiduspider
Allow: /article
Allow: /oshtml
Allow: /ershou
Allow: /$
Disallow: /product/
Disallow: /
User-Agent: Googlebot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-agent: Bingbot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-Agent: 360Spider
Allow: /article
Allow: /oshtml
Allow: /ershou
Disallow: /
User-Agent: Yisouspider
Allow: /article
Allow: /oshtml
Allow: /ershou
Disallow: /
User-Agent: Sogouspider
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /ershou
Disallow: /
User-Agent: Yahoo! Slurp
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-Agent: *
Disallow: /
2.2 反爬虫
门户网站通过相应的策略和技术手段,防止爬虫程序进行网站数据的爬取。
2.3 反反爬虫
爬虫程序通过相应的策略和技术手段,破解门户网站的反爬虫手段,从而爬取到相应的数据。
3.增量式爬虫
通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网站更新出的新数据。
二 爬虫的基本流程
![](https://img2018.cnblogs.com/blog/1730057/201912/1730057-20191202172849276-1846220043.png)
1、发起请求
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等
2、获取响应内容
如果服务器能正常响应,则会得到一个Response
Response包含:html,json,图片,视频等
3、解析内容
解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
解析json数据:json模块
解析二进制数据:以b的方式写入文件
4、保存数据
数据库
文件
三 请求与响应
![](https://img2018.cnblogs.com/blog/1730057/201912/1730057-20191202172928963-1589964155.png)
http://www.cnblogs.com/linhaifeng/articles/8243379.html
用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)
服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)
浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。
四 requests
常用的请求方式:GET,POST
其他请求方式:HEAD,PUT,DELETE,OPTHONS
ps:用浏览器演示get与post的区别,(用登录演示post)
post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k3=zzz
post请求的参数放在请求体内:
可用浏览器查看,存放于form data内
get请求的参数直接放在url后
url全称统一资源定位符,如一个网页文档,一张图片
一个视频等都可以用url唯一来确定
url编码
https://www.baidu.com/s?wd=图片
图片会被编码(看示例代码)
网页的加载过程是:
加载一个网页,通常都是先加载document文档,
在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求
User-agent:请求头中如果没有user-agent客户端配置,
服务端可能将你当做一个非法用户
host
cookies:cookie用来保存登录信息
一般做爬虫都会加上请求头
如果是get方式,请求体没有内容
如果是post方式,请求体是format data
ps:
1、登录窗口,文件上传等,信息都会被附加到请求体内
2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post
五 response
200:代表成功
301:代表跳转
404:文件不存在
403:权限
502:服务器错误
set-cookie:可能有多个,是来告诉浏览器,把cookie保存下来
最主要的部分,包含了请求资源的内容
如网页html,图片
二进制数据等
六 案例
1.爬取搜狗首页的源码数据
import requests
url = "https://www.sogou.com/"
response = requests.get(url=url)
sougou_text = response.text
with open ('sougou.html','w',encoding='utf-8') as f:
f.write(sougou_text)
2.基于搜狗编写简单的网页采集
import requests
search = input('输入要搜索的内容:')
url="https://www.sogou.com/web"
params={
'query':search
}
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
response = requests.get(url=url,params=params,headers=headers)
response.encoding='utf-8'
respones_text = response.text
filename = search+'.html'
with open(filename,'w',encoding='utf-8') as f:
f.write(respones_text)
print(search+'获取成功')
3.爬取豆瓣电影的电影详情数据
import requests
start = input('请输入开始数据')
limit = input('请输入数据个数')
url="https://movie.douban.com/j/chart/top_list"
parmas={
'type': '5',
'interval_id' :'100:90',
'action': '',
'start': start,
'limit': limit,
}
'''
data={
'on': 'true',
'page': '1',
'pageSize':'15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn':'',
}
'''
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = requests.get(url=url,params=params,headers=headers)
movie_list = response.json()
f = open('dbmovie.txt','w',encoding='utf-8')
for dict in movie_list:
title = dict['title']
score = dict['score']
f.write(title+':'+ score+'\n')
print(title,'获取成功')
f.close()
4.获取斗图网的一张图片
方式一:
斗图网:http://www.doutula.com/
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
url = 'http://ww4.sinaimg.cn/large/6af89bc8gw1f8op8nin2ug206t05k7s0.gif'
image = requests.get(url=url,headers=headers).content
with open('./img.jpg','wb') as f:
f.write(image)
方式二:
from urllib import request
url = 'http://ww4.sinaimg.cn/large/6af89bc8gw1f8op8nin2ug206t05k7s0.gif'
request.urlretrieve(url,'./image2.jpg')
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战
· AI工具推荐:领先的开源 AI 代码助手——Continue