python爬虫简介
爬虫就其本质而言就是程序模拟浏览器访问网页的各种操作,其中网址的访问、图片、文字、音频的筛选下载等操作既是基础又是爬虫的灵魂所在,再此基础上的灵活运用,例如结合具体的要求如并发,分布式,大数据处理等等不断丰富了爬虫的内涵,使其逐渐分离成为一个独立的学科。
目标网页介绍
乐愚社区作为一个宅男基地,精选的美图可以说是十分符合宅男的口味,每页的推荐量少却是高质量,而正因为美图零散的分布在各个页面,手动保存显得十分繁杂,此时爬虫的功效就凸显出来了。
网页以及网址的分析
乐愚社区主要是web框架封装的app应用,没有专门适应浏览器的网页,所以浏览器打开UI依旧是app框架,其中美图版块进入地址为:https://bbs.leyuz.net/f/meitu,以目录形式展示每个图集,具体图片在点击目录项后的详情页中。目录共有465页(我原以为目录的页数是根据后台数据自动更新的没想到在js代码中写死了,汗!)
尝试着点击第二页,第三页,通过比较寻找url从的规律,发现从第二页开始的url满足规律为:
红色部分为各自的页面数,按着这样思路反推,验证https://bbs.leyuz.net/f/meitu?pn=1&od=0同样可以访问第一页。而每个目录项对应的href就是详情页的相对地址,最后具体页面直接就是存放着图片的地址。如此分析下来爬虫的工作就已经完成了一半了。
具体的python实现
首先获取脚本中规定的总页数的值count(以防后端心血来潮更改数字)
url = 'https://bbs.leyuz.net/f/meitu'
htmlcode = requests.get(url)
kk = re.compile('count: ([^,]*),')#找到网页总页数
list= kk.findall(htmlcode.text)
pagetotalnum = int(list[0])
然后就可以一页页的爬取详情页的相对URL,存储在detail中然后下载。
for i in range(pagetotalnum):
url = 'https://bbs.leyuz.net/f/meitu?pn='+str(i+1)+'&od=0'
htmlcode = requests.get(url)
soup = BeautifulSoup