看了好多的这个项目的帖子,但是该网站(http://i.jandan.net/)【妹纸图】好像最近修改了一下,就是图片需要加载之后才能显示出图片的地址,不然总是取不到图片的地址,所以本人采用了selenium框架(不清楚这个框架的小伙伴可以看看大佬的文章https://cuiqingcai.com/2599.html)。
网站翻页是有规律的
第一页:http://i.jandan.net/ooxx/page-1#comments
第二页:http://i.jandan.net/ooxx/page-2#comments
第三页:http://i.jandan.net/ooxx/page-3#comments
url = "http://i.jandan.net/ooxx/page-" page = 1 start_urls = [url + str(page) + "#comments"]
首先可以爬取总也数,然后通过for循环拼凑url就可以得到全部的url地址。(我个人比较懒直接就取了总页数为10,没有爬取总页数)
通过查看网站源代码,可以找到图片的地址。
1.(默认已准备好环境)打开cmd,输入scrapy startproject project_name立刻在此目录下创建一个名称为project_name的工程。可以打开pycharm,并导入该工程。
2.编写items.py文件。因为要爬取煎蛋妹纸图,所以首先获得图片的地址。所以在items.py文件定义一个变量img_url。
import scrapy class PicsOfJandanItem(scrapy.Item): img_url = scrapy.Field()
3.编写spider。在cmd中输入scrapy genspider spider_name object_url。其中spider_name是你的爬虫名称,object_url是爬虫爬取网页的范围。
然后就可以开始编写自己的爬虫。请注意name='picsDemo'!请注意name='picsDemo'!请注意name='picsDemo'!,后面会提到其用处。
import scrapy from pics_of_jandan.items import PicsOfJandanItem from selenium import webdriver class PicsdemoSpider(scrapy.Spider): name = 'picsDemo' allowed_domains = ['jandan.net'] url = "http://i.jandan.net/ooxx/page-" page = 1 start_urls = [url + str(page) + "#comments"] def parse(self, response): browser = webdriver.Chrome() browser.maximize_window() browser.get(response.url) browser.implicitly_wait(15) a_list = browser.find_elements_by_link_text("[查看原图]") for a in a_list: item = PicsOfJandanItem() print(a.get_attribute('href')) item['img_url'] = a.get_attribute('href') yield item if self.page < 10: self.page += 1 yield scrapy.Request(self.url + str(self.page) + "#comments",self.parse)
4.编写pipelines.py文件,就是将得到数据保存到一个固定的地方。
import requests class PicsOfJandanPipeline(object): count = 1 def process_item(self, item, spider): result = requests.get(item['img_url']) with open("H:/pictures/pics_jandan/"+str(self.count)+".jpg",'wb') as f: f.write(result.content) f.close() self.count += 1 return item
5.要使pipelines.py文件工作需要修改下settings.py文件的内容。
6.最后是运行爬虫,有两种方式。一种是在cmd中输入scrapy crawl picsDemo(在步骤3中的name="picsDemo"),千万不能弄错。第二种是在工程项目的根目录下创建一个新文件test_pics_of_jandan.py。
from scrapy.cmdline import execute execute(['scrapy','crawl','picsDemo'])
然后直接运行该文件即可。本人就是使用第二种方法。(可以直接在pycharm上看到结果)
7.最后得到的结果。