前言:将之前的爬取图片和文字简单的应用了一下,期间遇到一些问题,主要是因为之前只是简单的学习了Python,导致一些语法,不过关。但是,解决了问题之后,还是比较兴奋的。
代码及注释:
# 爬取豆瓣河神演员照片
from bs4 import BeautifulSoup
import requests
import lxml
import re
url = 'https://movie.douban.com/subject/26776350/celebrities'
html = requests.get(url).content
soup = BeautifulSoup(html,'lxml')
#用class搜索,由于是python的关键词,所以要用下划线
imgs = soup.find_all(class_="avatar")
names = soup.find_all('a',href=re.compile("celebrity"),class_="name")
i = 0
print('开始下载')
for img in imgs:
img_url = img['style']
#利用切片获得图片网址
img_content=img_url.split('(')[1].split(')')[0]
try:
print('下载第%s张图片'%i)
with open('河神\\'+str(names[i].string)+'.jpg','wb') as f:
#将获得图片网址转换成二进制编码
f.write(requests.get(img_content).content)
i+=1
except Exception:
print('出现错误')
print('下载完成')
相关问题:
①BeautifulSoup的应用
按标签属性搜索,如标签名,标签中某些内容用正则表达式re进行匹配。以及用class搜索的注意点
#用class搜索,由于是python的关键词,所以要用下划线
imgs = soup.find_all(class_="avatar")
names = soup.find_all('a',href=re.compile("celebrity"),class_="name")
②spllit的应用
为了提取标签内容中图片网址和姓名
处理办法:
#利用切片获得图片网址
img_content=img_url.split('(')[1].split(')')[0]
得到的网址是utf-8编码的,保存到文件中需要转码
#将获得图片网址转换成二进制编码
f.write(requests.get(img_content).content)
③小处理技巧
用中括号及标签内部属性名获得该属性
#<.......style="background-image: url(https://img3.doubanio.com/img/celebrity/medium/39105.jpg)".....>
img_url = img['style']
#img_url=background-image: url(https://img3.doubanio.com/img/celebrity/medium/39105.jpg)