爬虫练手——爬取草书网站的草书字体图片

爬取草书网站(http://www.shufazidian.com/)的草书字体图片

要求

在书法字体查询网站http://www.shufazidian.com/爬取草书的字体图片,并将其保存到本地文件夹,以汉字为文件名,以人名为保存的图片名。

关于所用库的介绍
requests库:

使用pip install requests即可完成安装,是用于爬虫的关键库,requests库简单易上手,requests实现了 HTTP协议中绝大部分功能,它提供的功能包括 Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证、连接超时、Session等很多特性,可支持get请求,post表单请求,最重要的是它同时兼容 python2 和 python3。

os模块:

python的os模块是内置标准库,不需要额外下载,可以直接导入使用。
os 模块提供了访问操作系统服务的功能,在对文件进行操作的时候,open() 这个内建函数可以打开文件,但是如果要对文件进行重命名,删除等操作,就要用到 os 模块的方法。

BeautifulSoup库:

在使用BeautifulSoup库时需要使用pip install bs4命令安装,然后通过from bs4 import beautifulsoup导入使用,Beautiful Soup库是解析、遍历、维护“标签树”的功能库。Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性。通过Beautiful Soup库,我们可以将指定的class或id值作为参数,来直接获取到对应标签的相关数据,这样的处理方式简洁明了。此外,BeautifulSoup在使用时依赖解析器,如lxml,html5lib等,需要额外下载。

代码解读

本项目由以下四个函数构成,

get_page(url,word):	#获取网页元素
parse_page(html):		#解析网页
to_file(url,word):	#将文件保存到本地
main ():			#主函数

1.get_page(url,word)函数

def get_page(url,word):
    try:
        headers = {
            'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 ' #构造爬虫请求头
                            '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
            "referer": "http://www.shufazidian.com/",
            "Accept": "text/html, application/xhtml+xml, image/jxr, */*",
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "zh-CN",
            "Cache-Control": "no-cache",
            "Connection": "Keep-Alive",
            "Content-Length": "19",
            "Content-Type": "application/x-www-form-urlencoded",
            "Cookie":"cookiesort=7;
Hm_lvt_5ac259f575081df787744e91bb73f04e=1563974376,1564218809; Hm_lpvt_5ac259f575081df787744e91bb73f04e=1564226330",
            'Host': 'www.shufazidian.com'
        }
        data = {
            'wd' : word,
            'sort': 7
        }
        r = requests.post(url, headers= headers,data= data) # post请求
        r.raise_for_status()	#自动解析网页编码
        r.encoding = r.apparent_encoding
        return r.content
    except:
        return ""

此函数主要用于获取网页html信息,其中的headers中包含的是构造爬虫的请求头,data中包含的是在用requests库进行爬虫时提交的post表单信息。

data = {
‘wd’ : word,
‘sort’: 7
}

通过分析网页可以得出,草书的post表单请求,草书对应的打代码的标签为“7”,而且所搜的字体会传输到data的“wd”中,故构造data表单请求并将word字体的数据传送到,“wd”中。

然后调用我们的requests库进行爬取信息,将信息返回,用requests库中的content方法即可。

2.parse_page(html)函数
def parse_page(html):
    soup = BeautifulSoup(html ,"lxml")      #解析网页
    pics = soup.find_all(class_="mbpho")    #获得图片所在的标签
    pic_link = list()
    name = list()
    for i in range(1,len(pics)):
        pic = pics[i].find(name="a").find(name="img")["src"]    #获得图片的链接并存入列表
        pic_link.append(pic)
        title = pics[i].find(name="a")["title"] #获得图片的作者并存入列表
        name.append(title)
    pic_dic = dict(zip(pic_link,name))  #构造图片和作者一一对应的字典
    return pic_dic

此函数的功能是调用BeautifulSoup库解析网页内容,由上图内容可以看出,我们所要获取的内容都包含在一个class=”b=mbpho”的标签里,其中href中包含的是图片的的链接,title的内容是图片的人名。所以,首先构造BeautifulSoup的实例对象soup,将html传入函数,并用lxml解析器解析,然后调用BeautifulSoup中的find_all方法进行信息的搜查和提取,并将所获得的图片链接以及图片名字存入列表,最后调用的zip()方法,构造字典将图片链接和图片的人名一一对应并返回字典。

3.to_file(url,word)函数
def to_file(url,word):
    if not os.path.exists("E://shufa"): #创建书法目录
        os.mkdir("E://shufa")
    path = "E://shufa//"+word   #创建搜索图片目录
    if not os.path.exists(path):
        os.mkdir(path)
    os.chdir(path)              #改变当前工作目录到path

    html = get_page(url, word)  #获得网页的html
    pic_dic = parse_page(html)  #解析网页html,返回图片链接和图片作者对应的字典

   header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0)like Gecko Core/1.70.3704.400 QQBrowser/10.4.3587.400",
        "Cookie": "cookiesort=7; Hm_lvt_5ac259f575081df787744e91bb73f04e=1563974376,1564218809; Hm_lpvt_5ac259f575081df787744e91bb73f04e=1564226330"

}

    for item in pic_dic:
        #url = item
        try:
            response = requests.get(item, headers=header)#获取图片链接
            if response.status_code == 200:
                open(pic_dic.get(item) + ".jpg", 'wb').write(response.content)
                print("{} 保存成功".format(pic_dic.get(item)))
        except:
            return ''

to_file()函数主要是调用os库创建书法的目录并按要求保存图片,创建书法目录然后按照汉字创建汉字目录,将图片添加进去。重要的还是要再次调用requests库的get方法爬取图片,由于之前已经解析出了图片的链接,所以我们只需要将之前把保存图片的字典遍历,并将图片的链接传入get方法中即可。

4.main()函数
def main ():
    url = "http://www.shufazidian.com/"
    words = ["刘","陶","林","张","任","爱","你","我","草",“书”]
    for word in words:
        to_file(url,word)

在主函数里主要是调用to_file()函数,,将url 和 word 参数传入函数中,便可以实现对书法网站的图片抓取。

效果展示

在这里插入图片描述
在这里插入图片描述

源代码
https://blog.csdn.net/lucklydog123/article/details/100547650

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值