2019.06 用Java制作P站爬虫教程

制作Pixiv爬虫教程

网上大多数教程不是很详细,而且p站对反爬虫有了新的措施,
经过半天研究后Lam终于做出来了,然后兴奋的写下这篇教程XD
爬虫是通过Java写的w

准备材料

Java
Jsoup - 用来解析Html网页
HttpClient - 用来保持会话访问P站
Gson - 解析Json
脑子 - 脑子是个好东西

Step 0: 登录前的准备

登录过程网上已经有提到过,获取PostKey后调用登录接口,保存Cookie以方便后续使用
这里再详细讲一讲:

我们先准备一个HttpClient对象
2019.06 用Java制作P站爬虫教程_第1张图片
如果需要设置代理可以在构造HttpClient对象时设置.
然后访问 https://accounts.pixiv.net/login?lang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index 获取PostKey
PostKey的形式已经改变了,他存在于idinit-config的一个input标签里
2019.06 用Java制作P站爬虫教程_第2张图片
那么我们代码可以这么写:
2019.06 用Java制作P站爬虫教程_第3张图片
这样我们就准备好进行登陆了!

Step 1: 登录Pixiv

我们回到浏览器控制台,打开Network,清空列表,准备抓取登录包
注意!Network里一定要打开好Preserve Log,不然会被刷掉的
2019.06 用Java制作P站爬虫教程_第4张图片

然后输入帐号密码进行登录,等待网页加载完成后找到login?lang=zh请求项:
2019.06 用Java制作P站爬虫教程_第5张图片
可以看到这个接口是Post请求类型的,它提交了一个表单数据,里面的password,pixiv_idpost_key就是我们登录需要的了
注意刚刚获取PostKey时的Cookie也要传递(可能是必要的?)
然后代码就这么写:
2019.06 用Java制作P站爬虫教程_第6张图片

这样我们就完成了登录!

Step 3: 下载图片

我们知道P站如果不登录的话,插图详情是无法下载原图的,所以我们登录后就可以下载了!
插图详情的链接格式为: https://www.pixiv.net/member_illust.php?mode=medium&illust_id= 后面跟插图ID
随便访问一张插图=w=比如说:
(图片来源:https://www.pixiv.net/member_illust.php?mode=medium&illust_id=72994550)
2019.06 用Java制作P站爬虫教程_第7张图片
然后我们看看Html结构,定位到图片的img标签:
2019.06 用Java制作P站爬虫教程_第8张图片
Html代码:

ツインテールちゃん/凪白みとのイラスト

然后发现这个标签有一个class属性,我们选择sc-1qpw8k9-1(或许以后会改变?)作为我们寻找图片Url的方法
通过访问插图详情页,交给Jsoup生成Document文档,然后通过Jsoup提供的Document对象里的getElementsByClass("sc-1qpw8k9-1").get(0).attr("src")来获取图片链接即可!



















好的肯定有人问:诶!为什么我获取了链接访问的是403!!!
啊哈,这里有一个很重要的请求头!
我们从Chrome控制台的Network里找到图片(xxx_px_master.xxx)
然后,纳尼!?为什么没有显示请求头???
2019.06 用Java制作P站爬虫教程_第9张图片
这里只找到了一行 Provisional headers are shown,这里涉及到一个叫CORB的安全措施,这里就不详细说明了
既然这样,我们还有什么办法查看他们的请求头呢?
有的!用firefox!(moz高兴的拍起了肚皮)
2019.06 用Java制作P站爬虫教程_第10张图片
OK,看到这里应该就知道为什么直接访问图片会出现403了吧!如果不加入Referer请求头并设置值为该插图的插图详情链接的话,Pixiv会把它当成非法访问而拒绝提供图片的!

至此,教程结束!

你可能感兴趣的:(Java爬虫)