目录
1.获取百度网页并打印?
2.获取帅哥图片并下载到本地
3.获取美女视频并下载到本地
4.搜狗关键词搜索爬取
5.爬取百度翻译
6.爬取豆瓣电影榜单
7.JK妹子爬取
?1.获取百度网页并打印?
import requests
url="https://www.baidu.com/"
#ua伪装
param={
' User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
response =requests.get(url,params=param)
response.encoding = response.apparent_encoding
print(response.text)
?
其中代码中?response.encoding = response.apparent_encoding
![](https://img-blog.csdnimg.cn/20200225122713475.png)
?
encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因
apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确。当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。 ?
作用是? 防止乱码
?
2.获取帅哥图片并下载到本地
import requests
url = "https://cn.bing.com/images/search?view=detailV2&ccid=XQzISsWk&id=979B73C4E472CCA4C34C216CD0693FDC05421E1E&thid=OIP.XQzISsWklI6N2WY4wwyZSwHaHa&mediaurl=https%3A%2F%2Ftse1-mm.cn.bing.net%2Fth%2Fid%2FR-C.5d0cc84ac5a4948e8dd96638c30c994b%3Frik%3DHh5CBdw%252fadBsIQ%26riu%3Dhttp%253a%252f%252fp2.music.126.net%252fPFVNR3tU9DCiIY71NdUDcQ%253d%253d%252f109951165334518246.jpg%26ehk%3Do08VEDcuKybQIPsOGrNpQ2glID%252fIiEV7cw%252bFo%252fzopiM%253d%26risl%3D1%26pid%3DImgRaw%26r%3D0&exph=1410&expw=1410&q=%e5%bc%a0%e6%9d%b0&simid=608020541519853506&form=IRPRST&ck=68F7B9052016D84898D3E330A6F4BC38&selectedindex=2&ajaxhist=0&ajaxserp=0&vt=0&sim=11"
r = requests.get(url)
with open("zhangjie.jpg","wb") as f:
f.write(r.content)
print("over!!!")
结果是这个:![](https://img-blog.csdnimg.cn/1d480d6b0f594cb986f322c6193950da.png)
但是这个照片在我的window电脑上打不开
![](https://img-blog.csdnimg.cn/b631371f089541258d3b3dd06521e963.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
找了好久资料,这个仍然没解决,有小伙伴知道可以在评论区指点指点?
?
3.获取美女视频并下载到本地
import requests
url = 'https://haokan.baidu.com/v?pd=wisenatural&vid=12502968524882193208'
r = requests.get(url)
with open('jk.mp4', 'wb') as f:
f.write(r.content)
print('下载完成')
![](https://img-blog.csdnimg.cn/d5d940d7a5dc4dc98be4351f1df80410.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
?![](https://img-blog.csdnimg.cn/d051c545810241be9d34348d6472d408.png)
?
4.搜狗关键词搜索爬取
import requests
#网页收集器
url = "https://www.sogou.com/web/"
kw=input('enter a word: ')
header={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
param={
'query':kw
}
response = requests.get(url=url,params=param,headers=header)
page_txt = response.text
filename = kw+'.html'
with open(filename,"w",encoding="utf_8") as fp:
fp.write(page_txt)
print(filename,"保存成功")
![](https://img-blog.csdnimg.cn/e1f17e9e89b0436cac55017633fe7b91.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
?![](https://img-blog.csdnimg.cn/cf7e9f439f2b4e50a8a8619d68be0d28.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_13,color_FFFFFF,t_70,g_se,x_16)
?
5.爬取百度翻译
![](https://img-blog.csdnimg.cn/a2b58a698fea4aa6a79094d03ce8ce8d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_14,color_FFFFFF,t_70,g_se,x_16)
发现是post请求 (而且当你英文输入法下输入一个字母就会刷新一次页面)
import requests
import json
#获取url
post_url = "https://fanyi.baidu.com/sug"
#UA伪装
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
#数据传入
word = input("enter a word:")
data = {
'kw': word
}
response = requests.post(url=post_url,data=data,headers=header)
dic_obj = response.json()
#print(dic_obj)
#永久性储存
filename = word+'.json'
fp = open(filename,"w",encoding="utf-8")
json.dump(dic_obj,fp=fp,ensure_ascii=False)
print("over!!!")
保存为json文件,将json文件复制
我们打开json格式网站https://www.bejson.com/
![](https://img-blog.csdnimg.cn/f4b612961bbe41f4ace814c2de12d338.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
?
6.爬取豆瓣电影榜单
import requests
import json
url = "https://movie.douban.com/j/chart/top_list"
params = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': '100',
'limit': '20'
}
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
response = requests.get(url=url,params=params,headers=header)
list_obj = response.json()
fp = open("./b.json","w",encoding="utf-8")
json.dump(list_obj,fp,ensure_ascii=False)
#最后去网页json格式网站格式化
print("over!!!")
?这里强调一下params在网站的这里
![](https://img-blog.csdnimg.cn/d863a28c72054b189fa2852d867a95c2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
?
?
7.JK妹子爬取
import requests
import re
import urllib.request
import time
import os
header={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
url="https://cn.bing.com/images/async?q=jk%E5%88%B6%E6%9C%8D%E5%A5%B3%E7%94%9F%E5%A4%B4%E5%83%8F&first=118&count=35&relp=35&cw=1177&ch=705&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1&SFX=4"
r = requests.get(url=url,headers=header)
c = r.text
pattern = re.compile(r'<div class="imgpt".*?<div class="img_cont hoff">.*?src="(.*?)".*?</div>',re.S)
items = re.findall(pattern,c)
os.makedirs('photo',exist_ok=True)
for a in items:
print(a)
for a in items:
print("下载图片:"+a)
b=a.split('/')[-1]
urllib.request.urlretrieve(a,'photo/'+str(int(time.time()))+'.jpg')
print(a+'.jpg')
time.sleep(2)
?
![](https://img-blog.csdnimg.cn/91d55b31ceca44a9b3c6fd6a6f87257f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/5eeaa41b86ac4006b2ce33b0b13a3cc1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGVhcnRfNjY2Mg==,size_20,color_FFFFFF,t_70,g_se,x_16)
?
补充一:如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。
而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。
补充二:os.makedirs(name, mode=0o777, exist_ok=False) 作用 用来创建多层目录(单层请用os.mkdir) 参数说明 name:你想创建的目录名 mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。 exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。 补充三:
描述 urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
函数说明
将URL表示的网络对象复制到本地文件。如果URL指向本地文件,则对象将不会被复制,除非提供文件名。返回一个元组()(filename,header),其中filename是可以找到对象的本地文件名,header是urlopen()返回的对象的info()方法(用于远程对象)。 第二个参数(如果存在)指定要复制到的文件位置(如果没有,该位置将是一个生成名称的tempfile)。第三个参数,如果存在,则是一个回调函数,它将在建立网络连接时调用一次,并且在此后每个块读取后调用一次。这个回调函数将传递三个参数;到目前为止传输的块计数,以字节为单位的块大小,以及文件的总大小。第三个参数可能是-1,在旧的FTP服务器上,它不返回文件大小以响应检索请求。
参数说明
url:外部或者本地url filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。 ?
|