爬取糗百的图片
最近在研究python,想着自学爬虫获取数据,到时候进行数据分析
在爬取图片的时候有些曲折,但是最终还是被我攻克下来了
话不多说,我们开始
我们要爬取的网站是 糗事百科 的图片
首先,我们来进行简单的一步数据分析
F12,找出里面的结构,找到我们想要的图片,热图,那些广告图我们是不要的
发现这里的主要的图片都在这里面,都有这个illustration的类名
OK,简单分析之后我们开始动手实践
第一步,我们先进行一个UA伪装,F12,找到NetWork选项栏,随便点一个进去,找到User-Agent
url='https://www.qiushibaike.com/imgrank/'
headers = {
'User-Agent': '这里放你自己的User-Agent'
}
#这一步是获取网页的HTML界面
allHtml = requests.get(url=url,headers=headers).text
接下来我们获取到我们想要的图片,这个刚刚我们已经分析过了,这里就直接上代码
allImg=allHtml.find_all("img",class_='illustration')
然后我们获取到图片的URL地址
imgurl = img['src']
#这里糗百的URL是没有https的,我这里给他加了上去
images = requests.get("https:"+imgurl)
接下来我们就是把获取到的图片转成base64编码之后再放到本地
Img64 = base64.b64encode(BytesIO(images.content).read())
imgdata = base64.b64decode(Img64)
with open('D:\\python学习\\爬虫\\choubai\\'+str(index)+'.jpg', 'wb') as f:
f.write(imgdata)
大体思路就是这样,我在这一块转64编码的时候遇到一些小问题,参靠这篇文章解决的
https://blog.csdn.net/abc15766228491/article/details/78901336
大家有兴趣的可以去了解一下,我就是这个地方出的错,转base64好像有点小问题,不知道出在哪里,有知道的小伙伴欢迎留言,我会仔细看的
# 这两个代码不知道为啥不行,就用了其他的库
# 下面两句代码好像转base64编码出错
# Img64 = base64.b64encode(requests.get("https:"+imgurl).content)
# print(requests.get("https:"+imgurl).content)
OK,接下来看代码
# @创建时间 : 2020/10/16 22:52
# @开发作者 : Vixcity
# @文件名称 : 糗百爬图.py
# @开发工具 : PyCharm
import requests
from bs4 import BeautifulSoup
import base64
from io import BytesIO
def getImg(allHtml):
# 获取到我们需要的img图片
allImg=allHtml.find_all("img",class_='illustration')
for index,img in enumerate(allImg):
# 获取到图片的url
imgurl = img['src']
images = requests.get("https:"+imgurl)
#转base64编码
Img64 = base64.b64encode(BytesIO(images.content).read())
imgdata = base64.b64decode(Img64)
# Img64 = base64.b64encode(requests.get("https:"+imgurl).content)
# print(requests.get("https:"+imgurl).content)
#存储文件到文件夹下
with open('D:\\python学习\\爬虫\\choubai\\'+str(index)+'.jpg', 'wb') as f:
f.write(imgdata)
def main():
# UA伪装请求数据
url='https://www.qiushibaike.com/imgrank/'
headers = {
'User-Agent': '这里放你自己的User-Agent'
}
allHtml = requests.get(url=url,headers=headers).text
#解析网页
soup = BeautifulSoup(allHtml,"html.parser")
getImg(soup)
if __name__ == '__main__':
main()