简单的pytho3图片爬取实现

用python写爬虫爬取图片可谓是无数python学习者初试牛刀的作品,由于python拥有大量便捷好用的库,python初学者甚至毫无编程基础的人都可以简单地写出一个用于爬取图片的爬虫,并从中获得部分满足感。

安装python及所需的库

我使用的版本是python3.6.5,下载地址:https://www.python.org/downloads/

requests:解析url 

beautifulsoup4:不会正则表达式童鞋的福音,可以容易的提取到html文件中各种标签及其属性

安装方法: 在Windows的cmd下输入以下指令

pip install requests 
pip install beautifulsoup4

获取并分析网页源代码

专业人员会通过如wireshark等专业工具抓包获取大量信息不过我们不用这么麻烦,在浏览器中,我们可以使用F12查看网页代码,我们的目标网址是https://www.1326x.com/Html/61/index.html,如果我们学习过一些简单的web,html的东西,便可以分析得出我们想要的图片的URL。

我们使用Request(url)生成Request对象,用urlopen()打开Request中的url网址并获得其内容,然后用html= response.read().decode('gbk', 'ignore')对其进行解析,gbk是编码格式,这里我们只识别gbk编码的部分,忽略无法识别的。最后用html_soup = BeautifulSoup(html,'lxml')生成BeautifulSoup对象,BeautifulSoup的引入使我们不用去管复杂的正则表达式,可以轻松从中提取想要的信息。用pic_url = element['src']就可以从上图的HTML中获取img的url。

这里有关于requests,urllib,BeautifulSoup,正则表达式的相关资料:

requests   urllib   BeautifulSoup   正则表达式

当然在这之前,我们最好设置一个header来模拟登陆网址。

header = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/'
                  '535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    }
    url = "https://www.1326w.com/Html/61/index.html"
    req = urllib.request.Request(url)
    response = urllib.request.urlopen(req)
    html = response.read().decode('gbk', 'ignore')
    html_soup = BeautifulSoup(html,'lxml')
    pic_url = element['src']
    print(pic_url)
    pic = requests.get(pic_url)

将图片下载到本地

这里我们只需要利用OS库中写文件的方法即可将图片写入指定文件夹。

     print(pic_url)
     pic = requests.get(pic_url)
     file_name = "mzt/"+str(x)+".jpg" #拼接图片名
     print(file_name)
     #将图片存入本地
     fp = open(file_name,'wb')
     fp.write(pic.content) #写入图片
     fp.close()

最后我们对代码进行面向对象的处理并且循环,就可以成功下载图片了。


运行结果:



整体代码:


from bs4 import BeautifulSoup
import re
import sys
import urllib
import os
import requests
from urllib import request

#def download_picpage(page_url, header):
    #download_req = request.Request(pic_url,header)
    #response = request.urlopen(download_req)

def gethtml(page_url , headers):
    req = urllib.request.Request(page_url)
    #先生成一个request对象,传入url
    response = urllib.request.urlopen(req)
    #通过指定urlopen打开request对象中的url网址,并获得对应内容
    html = response.read().decode('gbk', 'ignore')
    #获取页面的html
    the_html_soup = BeautifulSoup(html,'lxml')
    #获取html的bs
    return the_html_soup

def download(html_soup , pic_num):
    pic_url = element['src']
    #获取图片url
    print(pic_url)
    pic = requests.get(pic_url)
    #下载图片
    file_name = "mzt/"+str(pic_num)+".jpg"
    #拼接图片名
    print(file_name)
    fp = open(file_name,'wb')
    #将图片存入本地
    fp.write(pic.content)
    #写入图片
    fp.close()

if __name__ == '__main__':
    header = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/'
                  '535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    }
    purl = "https://www.1326w.com/Html/61/index-"
    url1 = "https://www.1326x.com/Html/61/index.html"
    #首页url
    x = 0
    for i in range(0,128):
        if i == 0:
            html_soup = gethtml(url1 , headers=header)
        elif i == 1:
            continue
        else:
            url = purl + str(i) + ".html"
            #拼接本页URL
            print(url)
            #gethtml(url)
            html_soup = gethtml(url , headers=header)
        for element in html_soup.find_all('img'):
            download(html_soup , x)
            x += 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值