一、创建crawlspider
scrapy genspider -t crawl spisers xxx.com
spiders为爬虫名 域名开始不知道可以先写xxx.com 代替
二、爬取彼岸图网分类下所有图片
创建完成后只需要修改start_urls 以及LinkExtractor中内容并将follow改为True,如果不改的话 只能提取到1、2、3、4、5、6、7、53的网页,允许后自动获取省略号中未显示的页面url
class BeautySpider(CrawlSpider):
name = 'beauty'
start_urls = ['https://pic.netbian.com/4kmeinv/']
links = LinkExtractor(allow=r'/4kmeinv/.*?.html')
rules = (
Rule(links, callback='parse_item', follow=True),
)
在LinkExtractor中allow中写统一链接的正则表达式,不需要很完整,能够与其他链接辨别开就行 也可以使用xpath,css (restrict_xpaths=, restrict_css= )
三、 页面内容提取
由于该网站没有反爬措施因此无需设置其他内容,这里提取了页面的url以及标题
def parse_item(self, response):
item = WomenspiderItem()
lis = response.xpath('//*[@id="main"]/div[3]/ul/li')
for li in lis:
url = li.xpath('./a/img/@src').extract_first()
title = li.xpath('./a/b/text()').extract_first()
item['title'] = title
item['img_url'] = 'https://pic.netbian.com/'+url
yield item
四、图片下载
开启管道,这里自定义下载图片继承自带的ImagesPipeline类
class DownloadsimgPipline(ImagesPipeline):
def get_media_requests(self, item, info):
url = item['img_url']
yield Request(url=url, meta={'item': item})
def file_path(self, request, response=None, info=None, *, item=None):
item = request.meta['item']
image_guid = hashlib.sha1(to_bytes(request.url)).hexdigest()
return u'{0}/{1}.jpg'.format(IMAGES_STORE, image_guid)
自定义下载只需要重写get_media_requests和file_path,这两个方法(如有其他需求可以重写其他方法,仅仅下载图片到本地指定内容修改这两个方法足以) IMAGES_STORE这里在settings中添加的下载的路径名不能自定义名,否则无法下载。
完整代码:
爬虫代码
import scrapy
from womenSpider.items import WomenspiderItem
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class BeautySpider(CrawlSpider):
name = 'beauty'
start_urls = ['https://pic.netbian.com/4kmeinv/']
rules = (
Rule(LinkExtractor(allow=r'/4kmeinv/.*?.html'), callback='parse_item', follow=False),
)
def parse_item(self, response):
item = WomenspiderItem()
lis = response.xpath('//*[@id="main"]/div[3]/ul/li')
for li in lis:
url = li.xpath('./a/img/@src').extract_first()
title = li.xpath('./a/b/text()').extract_first()
item['title'] = title
item['img_url'] = 'https://pic.netbian.com/'+url
yield item
settings设置
|