python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图

在这里插入图片描述
每一个子文件内对应着相应的图片

1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内


C:\Users\15538>e:
E:\>cd python_spider
E:\python_spider>scrapy startproject bc
创建成功后,进入文件夹内
E:\python_spider>cd bc
E:\python_spider\bc>scrapy genspider bcA级 "https://www.autohome.com.cn"
创建成功,会有相对应的输出代码

2)打开pycharm,导入文件,效果如下

其中,有一个start.py文件是自己需要创建的

3)创建start.py文件,为了更好的运行爬虫

from scrapy import cmdline
cmdline.execute("scrapy crawl bcA级".split())
#至此,start文件建立好

4)修改settings.py

22行,将True改为False
取消注释,并添加'User-Agent'
取消注释即可

5)进入主爬虫bcA级.py,编写爬虫

# -*- coding: utf-8 -*-
import scrapy

class Bca级Spider(scrapy.Spider):
	name = 'bcA级'
	allowed_domains = ['https://www.autohome.com.cn/4764/']
	start_urls = ['https://car.autohome.com.cn/pic/series/4764.html#pvareaid=3454438']
	#其中start_urls需要我们修改,打开汽车之家官网,按品牌找车--> 奔驰 --> 奔驰A级--> 图片实拍
	#然后复制其地址,与原来的start_urls的参数替换即可
	def parse(self,response):
		#利用xpath提取,不需要全景看车,所以索引从1开始
		uibox = response.xpath("//div[@class='uibox']")[1:]
		for uibox in uiboxs:
			title = uibox.xpath(".//div[@class='uibox-title']/a/text()").get()
			urls = uibox.xpath(".//ul/li/a/img/@src").getall()
			urls = list(map(lambda url:response.urljoin(url),urls))
			
			#后面这两行代码是需要编写完items.py后,才写的。
			#为了讲解清楚,我先给这两行代码注释
			"""
			item = BcItem(title=title,urls=urls)
			yield item
			"""

6)编写items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class BcItem(scrapy.Item):
	#只需写两行代码即可
	title = scrapy.Field()
	urls = scrapy.Field()

回到bcA级.py中,在上方导入

from bc.items import BcItem

之后可以将bcA级中的最后两行代码取消注释,注意那两行代码也是写的,当时并没有,就好比这个导入,我只是为了讲解的更清晰一点。

7)编写pipelines.py

import os
from urllib import request

class BcPipeline(object):
	def __init__(self):
		self.path = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')
		if not os.path.exists(self.path):
			os.mkdir(self.path)
	def process_item(self,item,spider):
		title = item['title']
		urls = item['urls']
		title_path = os.path.join(self.path,title)
		if not os.path.exists(title_path):
			os.mkdir(title_path)
		for url in urls:
			#这行代码是给每一种图片以它的地址命名,你仔细分析每一张图的图片地址前面的都一样,所以以下划线分割,取到最后一位字符就是名字。
			image_name = url.split("_")[-1]
			#利用request库的urlretrieve将图片下载到title_path绝对路径。
			request.urlretrieve(url,os.path.join(title_path,image_name))
		return item

8)运行start.py即可爬取



发布了26 篇原创文章 · 获赞 5 · 访问量 777

猜你喜欢

转载自blog.csdn.net/weixin_44730235/article/details/104431208