目录
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
?
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!!!")
结果是这个:
但是这个照片在我的window电脑上打不开
找了好久资料,这个仍然没解决,有小伙伴知道可以在评论区指点指点?
?
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('下载完成')
?
?
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,"保存成功")
?
?
5.爬取百度翻译
发现是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/
?
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在网站的这里
?
?
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)
?
?
补充一:如果不使用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表示服务器的响应头。 ?
|