Python数据分析及可视化实例之爬虫源码(01)

系列文章总目录:python数据分析及可视化实例目录
1.背景介绍
(1)这是随便找的,贴吧不用headers就可以访问:【美图】杂图_美图吧_百度贴吧
(2)原本也打算抓点妹子图,但我乎这么纯净的界面,还是别污了。
(3)源码重点掌握:requests请求,re正则提取标签,beautifulsoup提取标签;获取图片大小;判断文件夹是否存在;图片保存等。
(4)预留作业:利用pillow将抓取的图片拼接,形成照片墙,难度★★★☆☆;别以为没用哈,用好了这货词云,图云都可以自撸;后面验证码,图片相似处理都要靠它完成初级处理。这么说吧,数据清洗靠pandas,文本处理靠gensim,图片处理靠pillow,视频处理我不会。
(5)凡是在该源码基础上改编的爬虫,可以将源码投稿到本专栏;奖励若干中、英文python资料,源码,视频。
2.源码
# coding:utf-8import re,requestsfrom bs4 import beautifulsoupheaders = { # 'host': 'i.meizitu', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64; rv:55.0) gecko/20100101 firefox/55.0', 'accept-language': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3', 'connection': 'keep-alive', 'accept-encoding':'gzip, deflate', 'upgrade-insecure-requests':'1'} # 请求头,蛇无头不行,带上吧,后面会讲到用cookie实现单账号免密登录s = requests.session() # 保留会话def re_test(text): ''' :param text: 网页源文件 :return: 返回图片的链接 ''' # https://imgsa.baidu/forum/w%3d580/sign=20bec30aa0ec8a13141a57e8c7029157/2508562c11dfa9ecfd81b1f26bd0f703938fc180.jpg img_url = re.findall('https://imgsa.baidu/forum/.*?jpg',text) return img_urldef bs_test(text): ''' :param text: 网页源文件 :return: 返回图片的链接 ''' # soup = beautifulsoup(text, lxml) img_urls = soup.find_all('img',{'class':'bde_image'}) img_url = [i.get('src') for i in img_urls] return img_urldef img_size(content): # 熟悉下面这个图片处理库,对于验证码处理和ai有很大帮助哦。 from pil import image from io import bytesio img = image.open(bytesio(content)) # width,height = img.size # 获取图片大小,更改图片大小,拼接照片墙自己先试试 return img.sizedef save_img(url): ''' :param url: 图片地址 :return: 木有返回值 ''' img_name = url.strip().split('/')[-1] print(img_name) url_re = s.get(url.strip(),headers=headers) if url_re.status_code == 200: # 200是http响应状态 # print('准备保存') import os if not os.path.exists('baidu_img'): # 没有文件夹,则创建文件夹 os.mkdir('baidu_img') if img_size(url_re.content)[0] > 400 and img_size(url_re.content)[1] > 600: # 图片宽*高大于400*600像素才保存 print('尺寸不错,留下了') open('baidu_img/' + img_name, 'wb').write(url_re.content)if __name__ == '__main__': for i in range(2) : # 用2页测试一下 url = 'https://tieba.baidu/p/5033202671?pn='+str(i+1) # 构造和page相关的链接 req_text = s.get(url).text # print(re_test(req_text)) # 正则 # urls = re_test(req_text) # print(bs_test(req_text)) # bs urls = bs_test(req_text) for img_url in re_test(req_text): # 采用正则获取图片链接 save_img(img_url)
胶水语言博大精深,
本主只得一二为新人带路!