爬虫学习:
爬取站长素材里的图片
requests包的用法:
1、 requests包的用法requests.content # 以字节流形式打印
2、time包用法
time.sleep() # 可以设置休眠时间,避免被屏蔽Ip
代码:
注意: 出现乱码时,一定要注意原网页的编码方式,网页是utf-8,resp.encoding就等于utf-8,如果是gbk那么resp.encoding就等于gbk
# 1.拿到主页面的源代码,然后提取到子页面的链接地址,href
# 2.通过href拿到子页面的内容,从子页面下找到图片的下载地址 img—>src
# 3.下载图片
import requests
import time
from bs4 import BeautifulSoup
s = "http:"
url = "https://sc.chinaz.com/tupian/rentiyishu.html"
resp = requests.get(url) # 请求URL
resp.encoding = 'utf-8' # 处理乱码
main_page = BeautifulSoup(resp.text, "html.parser")
# 声明是html.parser,防止警告,resp.txt保存主页面源码
alist = main_page.find("div", class_="clearfix psdk imgload").find_all("a")
# 第一次缩小范围
# div标签下class=clearfix psdk imgload,且搜索所有的a标签
for a in alist: # 通过循环读取alist里的链接
href = a.get("href") # get()获取href属性里的值
href = s + href # 由于拿到的链接是缺少http:,所以字符串添加http:
child_page_resp = requests.get(href) # 获取子页面的源码
child_page_resp.encoding = 'utf-8' # 去除乱码
child_page_text = child_page_resp.text # 保存子页面源码
# 从子页面获取下载路径
child_page = BeautifulSoup(child_page_text, "html.parser")
p = child_page.find("div", class_="imga")
# 检索标签为div,class=imga的数据
img = p.find("img") # 查找标签img的数据
src = img.get("src") # 获取img标签里src的值
src = s + src
img_resp = requests.get(src) # 获取图片链接
img_name = src.split("/")[-1]
# 设置名字,利用split()方法以/分割,拿到URL最后一个\以后的内容
with open("D:\\笔记本\\爬虫图片\\" + img_name, mode="wb") as f:
f.write(img_resp.content) # 保存img_resp的字节
print("over!!!", img_name)
time.sleep(1) # 设置休息时间为一秒
print("all over!!!")
问题与解决办法:
1、 获取到主页面的源码后获取子页面报错提示
requests.exceptions.MissingSchema:无效URL“//sc.chinaz.com/tupian/2105100477
# 解决办法:
#发现是在主页面的源码中子页面的链接缺少http:,于是我定义一个字符串,然后将http:与获取到的子页面链接拼接在一起,成功解决
2、寻找网页的子页面链接的时候要进行查找时只要找到对应的类名和需要的标签即可,再通过get()方法得到标签里属性的值
p = child_page.find("div", class_="imga")
# 检索标签为div,class=imga的数据
img = p.find("img") # 查找标签img的数据
src = img.get("src") # 获取img标签里src的值
src = s + src
img_resp = requests.get(src) # 获取图片链接