Python爬虫爬取表情包 |
您所在的位置:网站首页 › qq符号表情包 › Python爬虫爬取表情包 |
听说你在网上斗图斗输了?听说你连斗图用的弔图也不知道去哪找? 首先我们要知道如果我们要爬取一个网站,我们要先分析这个网站,了解你的需求是什么。我这边大致也把需求分为了以下几大点:1、网站分析 2、对要爬取的图片分析 3、单页爬虫代码的编写 4、翻页爬取的处理。那我们首先从第一点网站分析来说。 网站分析 待爬取url:http://www.bbsnet.com/biaoqingbao/page/1我们先来分析一下这个网站我们要爬取的东西是静态的还是动态的。通过下图我们可以看到我们要找的东西是在网页源代码里面可以找到的,那证明这个网站是属于静态加载的网站了。我们不需要通过寻找数据接口去爬取,直接使用普通的爬虫代码进行爬取就可以了。 看完了单页爬取后是不是觉得自己的弔图瞬间比以前多了那么几张呢?什么?你说不够多?那没关系啊,我们再接着来说说翻页爬取,让你从此以后再也不缺图~ 4、翻页爬取处理 要做翻页处理,最直观的方法就是直接观察不同页的url变化了,通过点击网页最底部的下一页按钮我们可以观察到(下面的代码框里) 第二页:http://www.bbsnet.com/biaoqingbao/page/2 第三页:http://www.bbsnet.com/biaoqingbao/page/3根据上面的两个url规律我们可以知道如果说是翻页操作的话变化的地方只有page/(数字)后面这个数字,并且是以+1的形式去加的,所以我们就可以推断出第一页的url是: 第一页:http://www.bbsnet.com/biaoqingbao/page/1那么知道了第一页的url后我们相对应的也就可以把我们上面单页爬取的起始url改写成如下的写法 url = 'http://www.bbsnet.com/biaoqingbao/page/{}'.format()通过点击尾页我们可以观察到这个网站的表情包一共是有13页,所以这里我们就可以写个遍历以此来实现翻页功能
说到这里了,有个问题我需要跟大家提醒一下,就是有可能你的爬虫文件在运行途中会突然报错。在爬取到第101个图片文件的时候会报这么个错误,当时我也很纳闷什么问题=。=,直到后来我去网页里面看了一眼,才知道原来是这张图片它里面本来就是没东西的(就是图2里面的那个斗图神器) 1、 以上就是对表情包网站的爬取的全部分析,下面是完整代码: ''' 提示: 本次爬取使用到的库有requests, lxml 安装方法:win+R pip install xxx(需要安装的库) ''' import requests from lxml import etree class BqbSpider(object): def __init__(self): self.header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } self.name = 1 def get(self, url): res = requests.get(url, headers=self.header) html = res.content.decode('utf-8') return html def parse_picture(self, html): tree = etree.HTML(html) li_lst = tree.xpath('//ul[@id="post_container"]/li') img_lst = [] for li in li_lst: img_url = li.xpath('./div/a/img/@src') for img in img_url: img_lst.append(img) # print(img_lst) return img_lst def save(self, img_lst): for img in img_lst: if img == 'https://ws4.sinaimg.cn/large/9150e4e5gy1fs57bizowvg20dc0ehmyd.gif': continue else: response = requests.get(img) filename = './img/表情{}.png'.format(self.name) print('正在爬取第{}张表情包'.format(self.name)) with open(filename, 'wb') as f: f.write(response.content) self.name += 1 def main(self): # 用于翻页爬取 for i in range(1, 14): url = 'http://www.bbsnet.com/biaoqingbao/page/{}'.format(i) html = self.get(url) img_lst = self.parse_picture(html) self.save(img_lst) if __name__ == '__main__': b = BqbSpider() b.main()至此就是本篇文章的所有内容,有不足之处请多多指出。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |