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

好了,让我们进入正题。

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

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. PHPcms的安装步骤

    http://www.phpcms.cn 制作良好习惯: 1.备份 2.随时保存 3.注释 在自己的PHP环境里 简历一个文件夹 比如命名为YiNong 访问安装地址,http://localhost ...

  2. [转]asp.net core视图组件(ViewComponent)简单使用

    本文转自:http://www.cnblogs.com/dralee/p/6170496.html 一.组成: 一个视图组件包括两个部分,派生自ViewComponent的类及其返回结果.类似控制器. ...

  3. HttpFlexSession注册失败的怪问题

    web.xml中已经注册了HttpFlexSession <listener> <listener-class>flex.messaging.HttpFlexSession&l ...

  4. JS判断web网站访问端是PC电脑还是手机

    通过JS语句判断WEB网站的访问端是电脑还是手机,以显示不同的页面! <script type="text/javascript"> <!-- //平台.设备和操 ...

  5. 栅格那点儿事(四B)---多波段栅格数据的显示

    多波段栅格数据的显示 我上面说了这么多,可能有的人会觉得平时也根本用不上.自然,说起影像数据,大家接触到对多的就是最最常见的航片或卫片.对于这种栅格数据呢,大多数的场景下,都只需实现一个效果,就是最接 ...

  6. linux下查找字符串

    如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" * * : 表示当前目录所有文件,也可 ...

  7. ArcGIS API for JavaScript开发初探——基本地图组件使用

    1.前言 在上一篇我们已经我们已经讲述了第一个地图应用程序的HelloMap的创建过程,这一篇我们来讲述基本地图组件:Home Button.比例尺.鹰眼图的使用方法. 2.基本地图组件 在ArcGI ...

  8. Eclipse JSP 页面设置 charset=UTF-8

    windows —> Preferences —> 搜索框中输入:JSP,设置如下:

  9. Java问题定位之Java线程堆栈分析

    采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...

  10. 关于Authorware的十二种使用技巧

    Authorware是美国Macromedia公司(现已被adobe公司收购)开发的一种多媒体制作软件,它是一个图标导向式的多媒体开发工具.今天我们学习一下Authorware的十二种使用技巧,如果你 ...