scrapy框架小白实战--爬取煎蛋妹纸图

看了好多的这个项目的帖子,但是该网站(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.最后得到的结果。


猜你喜欢

转载自blog.csdn.net/weixin_41996053/article/details/80719917
今日推荐