第一次将自己的爬虫文件与大家分享.豆瓣美女网页图片爬取.比较简单,但很实用.给大家提供思路为主,增强个人的爬虫能力.希望能帮助到大家!!!

好了,让我们进入正题。

先给大家看下成果!!!激励大家赶快行动起来

1.爬虫文件:Dbmeinv.py

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from dbmeinv.items import DbmeinvItem
import re
import pdb class DbmeinvSpider(scrapy.Spider):
name = 'Dbmeinv'
allowed_domains = ['www.dbmeinv.com']
start_urls = ['https://www.dbmeinv.com/index.htm?cid=6',
'https://www.dbmeinv.com/index.htm?cid=7',
'https://www.dbmeinv.com/index.htm?cid=3'] def parse(self, response):
#提取本页url
le = LinkExtractor(restrict_css='ul.thumbnails') for link in le.extract_links(response):
yield scrapy.Request(link.url,callback=self.parse_images) #提取下一页url
le1 = LinkExtractor(restrict_css='li.next_page')
link1 = le1.extract_links(response) if link1:
yield scrapy.Request(link1[0].url,callback=self.parse) def parse_images(self,response):
meinv = DbmeinvItem() #这个网页比较特殊,图片的src所在的不同标签分3种情况,具体可以根据scrapy爬虫中遇到的error,到相应网页中查找到图片的src所在的不同标签
if response.xpath('//div[@class="image-wrapper"]/img/@src').extract():
url1 = response.xpath('//div[@class="image-wrapper"]/img/@src').extract()[0]
meinv['images_url'] = url1
image_name = re.findall(r'large/(.+?\.jpg)',url1)
meinv['images'] = image_name[0] if response.xpath('//div[@class="panel-body markdown"]//img/@src'):
url2 = response.xpath('//div[@class="panel-body markdown"]//img/@src').extract()[0]
meinv['images_url'] = url2
image_name = re.findall(r'large/(.+?\.jpg)', url2)
meinv['images'] = image_name[0] if response.xpath('//div[@class="topic-detail panel panel-default"]//img/@src'):
url3 = response.xpath('//div[@class="topic-detail panel panel-default"]//img/@src').extract()[1]
meinv['images_url'] = url3
image_name = re.findall(r'large/(.+?\.jpg)', url3)
meinv['images'] = image_name[0] yield meinv

2.items.py

import scrapy

class DbmeinvItem(scrapy.Item):

    images_url = scrapy.Field()
images = scrapy.Field()

3.pipelines.py

import scrapy
from scrapy.pipelines.images import ImagesPipeline  #ImagesPipeline直接提取存储图片
from scrapy.exceptions import DropItem
from dbmeinv.items import DbmeinvItem
import pdb   class DbmeinvPipeline(ImagesPipeline):
def get_media_requests(self,item,info):      #根据images_url相对应的src,进行下载
yield scrapy.Request(item['images_url']) def item_completed(self,results,item,info):    #检查是否存储成功
images_paths = [x['path'] for ok,x in results if ok] if not images_paths:
raise DropItem("Item contains no images") return item class DuplicatesPipeline(object):            #这个类是根据图片名称,去重作用
def __init__(self):
self.ids_seen = set() def process_item(self, item, spider):
if item['images'] in self.ids_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.ids_seen.add(item['images'])
return item

4.settings.py

IMAGES_STORE = r'C:\Users\Desktop\dbmeinv'     #图片存储文件名

USER_AGENT ={       #设置浏览器的User_agent,避免ERROR 403
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
} CONCURRENT_REQUESTS = 16 #同时来16个请求
DOWNLOAD_DELAY = 0.2 #0.2s后开启处理第一个请求
ROBOTSTXT_OBEY = False    #不遵守robots.txt
COOKIES_ENABLED = False   #禁用COOKIES

ITEM_PIPELINES = {      #设置启动顺序,1-1000,数字越小,优先级越高
'dbmeinv.pipelines.DbmeinvPipeline': 1,
'dbmeinv.pipelines.DuplicatesPipeline':200,
}

如果有遇到问题,欢迎来提问!!!大家一起进步

scrapy--dbmeinv的更多相关文章

  1. Scrapy爬虫笔记

    Scrapy是一个优秀的Python爬虫框架,可以很方便的爬取web站点的信息供我们分析和挖掘,在这记录下最近使用的一些心得. 1.安装 通过pip或者easy_install安装: 1 sudo p ...

  2. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  3. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  4. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  5. ubuntu 下安装scrapy

    1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...

  6. 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务

      上周学习了BeautifulSoup的基础知识并用它完成了一个网络爬虫( 使用Beautiful Soup编写一个爬虫 系列随笔汇总 ), BeautifulSoup是一个非常流行的Python网 ...

  7. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  8. scrapy cookies:将cookies保存到文件以及从文件加载cookies

    我在使用scrapy模拟登录新浪微博时,想将登录成功后的cookies保存到本地,下次加载它实现直接登录,省去中间一系列的请求和POST等.关于如何从本次请求中获取并在下次请求中附带上cookies的 ...

  9. Scrapy开发指南

    一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy基于事件驱动网络框架 Twis ...

  10. 利用scrapy和MongoDB来开发一个爬虫

    今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...

随机推荐

  1. CF 540D——Bad Luck Island——————【概率dp】

    Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. 为什么要使用markdown?

    markdown是什么? markdown是一种标记语言,它不是编程语言 为什么要使用markdown? markdown可以使用任何文本编辑器编写和查看 markdown编写的文件可以转化为html ...

  3. Dynamics CRM 2011通过客户端代码选择视图

    在实施的过程中我们经常会遇到这样的场景,有个系统标准的Lookup字段对应的不是一种Entity,如很多地方的客户实际上可选account或者contact,有的地方可选systemuser或者tea ...

  4. [转]C# 单例模式

    最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuable Object-Orient ...

  5. C++学生信息处理

    #include #include using namespace std; template int getArrayLen(T& array) //使用模板定义一个函数getArrayLe ...

  6. android错误整理

    1.Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientat ...

  7. UITabBarController动态添加TabBarItem

    NSArray *titles = @[L(@"首页"), L(@"新闻"), L(@"消息"), L(@"我的")]; ...

  8. 什么是permit-inside功能

    若内网有一台服务器映射成为一个公网IP地址,并且将该公网IP注册至一个域名中.此时内网用户通过直接输入域名访问该服务器,域名服务器将该服务器的地址解析为已经注册的公网IP地址.默认情况下,当内网用户通 ...

  9. 笨办法学Python(十三)

    习题 13: 参数.解包.变量 在这节练习中,我们将讲到另外一种将变量传递给脚本的方法(所谓脚本,就是你写的 .py 程序).你已经知道,如果要运行 ex13.py,只要在命令行运行 python e ...

  10. mysql主从分离

    1.工具: 两台机器 master:192.168.0.1 slave:192.168.0.2 2.master的配置 找到mysql的配置文件,一般centos的是/etc/my.cnf,ubunt ...