前言:
今天我们来学习一下可爱的小爬虫
配置环境:
首先我们下载好pycharm,打开Terminal,
利用命令:pip install requests
这样就配置好了requests模块。
简单爬取直接资源:
打开一个网页,看见了一个好看的图片,但是不知道咋回事发现不能下载,那么怎么把它搞到呢?
首先请使用火狐,谷歌这种浏览器,利用浏览器的审查元素功能查看网页,不断调整鼠标指向,就可以找到某个网页元素的图片。
但其实爬虫更用于高效率的工作,而不是爬取一个随手就能保存的资源,这里只是举例子
接下来是代码:
import requests
url="https://马赛克/4f7147c9ae0fe44a7462d2b94a5ec398.jpg_biwbp" #用资源的连接赋值给变量url
with open('pic.jpg', 'wb') as f: #利用with创造文件(会自动关闭),二进制方式写入
con = requests.get(url) #模拟浏览器发送请求
f.write(con.content) #向文件写入内容
如果没有爬到,不要急,可以加个UA头试试
UA头:user-agent,就是http头中的一个部分,表明请求发起者的身份,我们通过改变user-agent来模拟浏览器访问
查找UA头:在审查元素中,network,刷新页面,点击一个页面资源,即可找到UA信息
带有UA的代码:
import requests
url="https://马赛克/4f7147c9ae0fe44a7462d2b94a5ec398.jpg_biwbp" #用资源的连接赋值给变量url
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"} #改变UA头,避免一些反爬虫措施
with open('pic.jpg', 'wb') as f: #利用with创造文件(会自动关闭),二进制方式写入
con = requests.get(url,header) #模拟浏览器发送请求
f.write(con.content) #向文件写入内容
利用正则表达式高效率爬取信息:
找到我们想要爬取的网页,发送请求,得到返回值后查看text内容
import requests
import re
url="https://www.马赛克.com/tag/weimeinvsheng.html" #用资源的连接赋值给变量url
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"} #改变UA头,避免一些反爬虫措施 html=requests.get(url,header) print(html.text)
即可看到该网页源代码被打印
注意:如果出现乱码情况,是编码方式的原因,可以改变编码来解决
html.encoding="utf-8"
编码方式可以通过源代码中的“charset”来查看(一般在head标签中)
我们可以利用浏览器的审查元素发现,这个蓝色的url就是某个图片,那我们把这几个url筛出来,做成一个列表,循环请求访问,即可把所有图片都保存到本地。
筛出这些url,就要靠我们的正则表达式(re模块)。
import requests
import re
#用资源的连接赋值给变量url
url="https://www.马赛克.com/tag/weimeinvsheng.html"
#改变UA头,避免一些反爬虫措施
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}
#发送请求
html=requests.get(url,headers=header) html=html.text #查询条件 res=re.compile(r'<img data-original="(.*?)"') #筛选查询(匹配所有) reg=re.findall(res,html) print(reg)
然后我们就得到了一个url列表:
为了方便规整,将刚才的代码做成一个方法:
def request():
url = "https://www.马赛克.com/tag/weimeinvsheng.html" # 用资源的连接赋值给变量url
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"} # 改变UA头,避免一些反爬虫措施
# 发送请求
html = requests.get(url, headers=header) html = html.text # 查询条件 res = re.compile(r'<img data-original="(.*?)"') # 筛选查询(匹配所有) reg = re.findall(res, html) print(reg)
再做一个方法,作用是去通过url,下载内容,保存到本地
def download(url,name):
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
}
#发送请求(第三个参数是一个超时设置,可加可不加)
html = requests.get(url,headers=header,timeout=3)
#打开文件,进行操作
with open(name+'.jpg','wb') as f:
f.write(html.content)
再做一个方法,就是通过循环访问一个列表的元素,调用刚才的方法download:
def cycle(list):
i=0
for id in list:
i=i+1
download(id,i)
修改方法request方法,调用cycle:
将最后一句
print(reg)
改为
cycle(reg)
好,现在我们来看一下完整代码:
import requests
import re
def request():
url = "https://www.马赛克.com/tag/weimeinvsheng.html" # 用资源的连接赋值给变量url
# 改变UA头,避免一些反爬虫措施
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
}
# 发送请求
html = requests.get(url, headers=header)
html = html.text
# 查询条件(r' ' 加r使字符串中\不具有转义功能)
res = re.compile(r'<img data-original="(.*?)"')
# 筛选查询(匹配所有)
reg = re.findall(res, html)
cycle(reg)
def download(url,name):
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
}
#发送请求(第三个参数是一个超时设置,可加可不加)
html = requests.get(url,headers=header,timeout=3)
#打开文件,进行操作
with open(str(name)+'.jpg','wb') as f:
f.write(html.content)
def cycle(list):
i=0
for id in list:
i=i+1
download(id,i)
request()
运行一下,就会发现大功告成了!
额外技巧:
让爬虫走代理:
proxy = "127.0.0.1:1080"
proxies = {
"http": "http://" + proxy,
"https": "https://" + proxy,
}
#发送请求(第三个参数是一个超时设置,可加可不加)
html = requests.get(url,proxies=proxies)
设置休息时间
# 睡眠 1 秒
time.sleep(1);
更多欢迎访问博客:is-hash.com
商业转载 请联系作者获得授权,非商业转载 请标明出处