之前闲着写了个P站爬虫,爬取某标签的图片,按收藏数排序。谁让P站非会员不能按收藏数搜索呢……(不是专业画师开个会员感觉有点亏呀 (lll¬ω¬))
0x00 环境准备
我使用的是python2.7
,主要利用了urllib2
包里的Request()跟urlopen()来访问网页。分析网页则使用BeautifulSoup
包。
0x01 筛选网页信息
我们就以关键词Fate作为示例吧。首先上P站搜索Fate。观察网页源代码,查看图片的分类:
可以看到,每个图片都是一个表格项目,然后class='image-item'
。再分析的话,可以知道收藏数是一个a标签,class='bookmark-count _ui-tooltip'
。这些都对我们分析网页非常有帮助。
我们再观察一下这个网页的url:http://www.pixiv.net/search.php?s_mode=s_tag_full&word=Fate
。可以了解到网页是通过Post去传递信息的。word
对应的应该就是关键词了。此处再说明一下,如果使用的不是英文单词,而是日文的话会被url编码。此时使用urllib2
包中的quote
方法去把其编码成url编码即可,需要注意的一点是pixiv的url编码过滤了!?等标点符号,将这些标点放在quote()的第二个参数上即可实现过滤。再来看看这个网页http://www.pixiv.net/search.php?word=Fate&s_mode=s_tag_full&order=date_d&p=2
,可以注意到有个参数p
,显然是用来控制页数的,我们可以利用这个参数来翻页。
0x02 爬虫编写
现在我们可以开始编写爬虫代码了。首先是爬虫类的初始化,唯一的参数是需要搜索的tag。在这里构建了一个初始url,之后的参数都将在这个网址的基础上增加。对Pixiv搜索post参数有兴趣的朋友可以自己去实验一下。
不妨先写一个初始化request信息,并链接网页的函数。
上面的代码需要注意的是如果不传一个COOKIE给Pixiv,他不会给你显示收藏数的,所以必须想办法弄个有效的cookie。然后就是爬取与分析:
上面的代码中用到了BeautifulSoup
中的css选择器,利用标签的类来定位信息,具体利用的方法可以查询BeautifulSoup的官方文档。这里设定了一个页数记录变量page_count
,控制了爬取的页数。另外一个停止爬取的条件是该页面的图片项目数量小于10个,也就相当于爬到最后了。(当然不是10个也可以)最后把爬取到的信息以字典的形式存储在变量’scores_board’中,其中key为图片项目对应的url,value为对应的收藏数。最后就是排序返回运行结果了。
0x03 运行结果
展示一下爬虫的爬取结果吧。为了方便演示我把爬取的页数控制在了10页。