Python爬虫之知乎图片抓取

最近觉得python爬虫挺好玩的,就网上找了找教程自学了几天,真的还挺有意思的,推荐一个中国大学mooc平台的一个关于Python爬虫的课程,老师讲的很好,非常适合入门,这里是链接

想起曾经在知乎的一个专栏里面看到过一个非常好玩的东西,之前看的时候还不会爬虫,只是将文章收藏了下来,代码在这里。现在回过头来去看,发现还挺简单的。专栏文章是用lxml来解析html文件的,我查了下,发现xpath真的非常好用(哈哈,其实我还不怎么会,待找找教程学了再来吧),不过既然学了BeautifulSoup,我就用BeautifulSoup来简单实现一下吧。

废话不多说,直接上代码吧。(这里只是爬取一个问题下排名第一的答案里的图片)

import requests
from bs4 import BeautifulSoup
import os
import time

cookie = ''#那篇专栏文章里有教怎么用cookie
headers = {'User-Agent': 'Mozilla/5.0',#模拟浏览器向网页发出请求
'Cookie': cookie}


def getHtmlText(url):
    try:
        response = requests.get(url,headers=headers)
        response.raise_for_status()
        response.encoding = 'utf-8'
        return response.text
    except:
        exit('模拟cookie登陆失败')

def savePictures():
    html_text = getHtmlText('https://www.zhihu.com/question/40063489')
    #soup = BeautifulSoup(open('zhihu.html','r',encoding='utf-8'),'html.parser') #如果不会cookie登陆,可以自己手动保存网页源码为html文件
    soup = BeautifulSoup(html_text,'html.parser')

    #question和author,自己打开网页源码,找到他们,然后看所在标签
    question = soup.h1.text.strip() 
    author = str(soup.find_all(name='a',attrs='UserLink-link')[1].text) 
    #info就是author回答question的答案的所有信息
    info = soup.find_all(name='div',attrs="RichContent-inner")[0] #一个question下会显示两位排名靠前的回答,这里选择第一位
    x = info.find_all(name='noscript') #这就是所有图片链接所在的标签列表
    links = []
    for i in x:
        link = i.img.attrs['src']
        links.append(link)

    try:
        filename = question + ' - ' + author
        #print(filename)
        if not os.path.exists(filename):
            os.mkdir(filename)
        for i in range(len(links)):
            img_source = requests.get(links[i]).content
            img_path = filename + '/' + str(i)+ '.' + links[i].split('.')[-1]
            with open(img_path,'wb') as f:
                f.write(img_source)
                print(links[i],'保存成功')
    except:
        print('error')

start = time.time()
savePictures()
end = time.time()

print('总耗时: ',end-start,'秒')

哈哈,上截图:
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值