获取电脑IP地址
我们先开始最简单的抓取页面,http://myip.ipip.net/这个网站的源代码就是返回的自己外网IP地址和地址,我们通过抓取这个界面知道我们的外网IP地址
爬取网页的编码方式默认使用的是从HTTP header中猜测的响应内容编码格式(r.encoding),但使用这个有时并不准确,所以我们直接使用从内容中分析出来的编码格式(r.apparent_encoding)
import requests #导入requests库
url = "http://myip.ipip.net/"
try:
r = requests.get(url) #通过requests库的get方法
r.raise_for_status() #判断返回的状态码是否为200,不是200返回异常
r.encoding = r.apparent_encoding #将从内容中分析出来的编码作为输出的编码格式
print(r.text) #输出网页的源代码
except:
print("抓取失败!") #异常处理
运行结果
58同城爬取
这个爬虫例子我们主要学习User-Agent的添加,爬取的网站58同城
import requests #导入requests库
url = "https://bj.58.com/" #爬取的网页
kv = {"User-Agent": "Mozilla/5.0"} #伪装的User-Agent,爬虫默认的是python的标识
try:
r = requests.get(url, headers=kv, timeout=10) #将字典形式的User-Agent提交给控制参数headers,timeout是请求时间,超时返回异常
r.raise_for_status() #判断返回的状态码是否为200,不是200返回异常
r.encoding = r.apparent_encoding #将从内容中分析出来的编码作为输出的编码格式
print(r.text[8000:9999]) #输出网页的源代码,其中[8000:9999]表示输出8000行到9999行
except:
print("抓取失败!") #异常处理
运行结果
scdn博客搜索
这个例子适用与大部分提交搜索链接,如百度搜索,谷歌搜索,本例子是对博客搜索引擎的提交爬取
我们可以先用博客搜一个文章看URL的变化,这个是搜索一个“python爬虫”的URL:https://so.csdn.net/so/search/s.do?q=python%E7%88%AC%E8%99%AB&t=&u=
我们可以看到“?”后面就是提交的参数,q=后面就是我们输入的搜索文字,其中中文被转换成URL编码
然后我们使用requests库中的params参数进行提交
同理,360搜索,百度搜索格式都是一样的
import requests
url = "https://so.csdn.net/so/search/s.do" #URL链接使用?前面的后面的都是参数
kv1 = {"User-Agent": "Mozilla/5.0"} #伪装请求头
kv2 = {"q": "python爬虫-盗亦有道(二)"} #搜索的内容
try:
r = requests.get(url, headers=kv1, params=kv2, timeout=10)
r.raise_for_status() #判断返回的状态码是否为200,不是200返回异常
r.encoding = r.apparent_encoding #将从内容中分析出来的编码作为输出的编码格式
print(r.text) #输出内容
#print(r.url) #输出提交的url链接,可以测试看看
except:
print("抓取失败!")
运行结果
视频抓取
这个例子是抓取中国大学网嵩天老师的python网络爬虫课程的一个视频 “requests库实战”,本专栏也是根据这个课程做的笔记
首先通过开发者模式分析出网页的视频下载链接
抓取时使用二进制形式进行保存,同理爬取网页的图片也是用二进制来下载的
import requests
url = "https://jdvodrvfb210d.vod.126.net/mooc-video/nos/mp4/2017/02/28/1005856315_c9a73afe9d4b4dee8060f8cd41fc5255_sd.mp4"
#这个是保存路径,下面两个分别是以链接中的名字命名和自己命名的1111.mp4,使用split方法将url链接中最后一个"/"后的名字切割出来
path = "D://软件下载//"+url.split("/")[-1]
#path = "D://软件下载//1111.mp4"
try:
r = requests.get(url)
#首先open语句,path:文件保存路径,
# "wb":以二进制写方式打开,只能写文件,如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
#然后是with-as语句,对资源进行访问时,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,如文件的自动关闭
with open(path, "wb") as file:
#使用requests对象content(HTTP响应内容的二进制形式),将视频以二进制形式写入文件中
file.write(r.content)
print("视频下载成功!")
except:
print("抓取失败!")
运行结果
以上均为个人学习笔记,如有错误请指正,共同学习,谢谢。