链接在最后
已完成:
爬取yande首页(或指定标签)多页中的图片大图链接,并存储到json中
空白链接的解决
其他图片信息的提取
图片的存储
待完成:
数据库的存储(MySQL、MongoDB等)
多线程、多进程、代理等其他优化
目前遇到并解决的一些问题:
0、初次运行scrapy crawl yandes
报错,没有安装win32api,但pip install win32api无效
需要输入:pip install pypiwin32
1、robots协议设置,需要在settings中设置
(仅供学习交流,实际使用中请遵循robots协议)
ROBOTSTXT_OBEY = False
2、items中默认首字母为大写,在主文件中Import时要注意
3、在pipelines中初始化json时,要使用二进制格式
self.filename = open("yande.json", "wb+")
4、yande的大图链接位于小图下方的横条上

每一个li对应一张图的所有信息,注意一个li下面有多个a,因此要注明class
for each in response.xpath('//li'):
item = YandeItem()
item['imgurl'] = each.xpath('./a[@class="directlink largeimg"]/@href').extract()
yield item
但是这样操作下来,保存了大量空白url(每页均有)
可以添加个len语句去判断是否为空白(这里用图片链接是否存在来判断):
for each in response.xpath('//ul/li'):
if len(each.xpath('./a[@class="directlink largeimg"]/@href').extract())>0:
item = YandeItem()
这样解决了存在大量空白项的问题,也是因为这些空白元素,导致使用extract()[0]的时候发生超出索引报错
但为什么会产生这些空白,原因还没有搞清楚。
5、引入图片存储模块后,初次运行报错:No module named 'PIL'
解决:需要安装Pillow包(python3),pip install Pillow
6、图片下载默认读取的url名称为image_urls,当爬取这个信息的时候直接将链接保存为这个名字,便不需要在Imagepipeine模块中做任何修改,否则需要继承该类进行修改。
修改方法参考:https://blog.csdn.net/qq_41781877/article/details/80631942
7、json均能存储每一页的全部图片信息,但通常执行一次程序只能保存6张左右的图片。考虑因为网络卡顿造成的链接超时(毕竟是外国的图站)。因此不建议一次爬取过多页面。(或者选择爬取小图的链接或者采取代理等方式)

执行了3遍才爬下来一页的这么点。。
8、最后在windows下居然不会上传整个文件夹到github。。贴个教程
https://blog.csdn.net/geerniya/article/details/79552247
最后附上github地址:
https://github.com/yj4869/scrapy_yande.git
2万+

被折叠的 条评论
为什么被折叠?



