🐸文章适合于所有的相关人士进行学习🐸
🐶各位看官看完了之后不要立刻转身呀🐶
🐼期待三连关注小小博主加收藏🐼
🐤小小博主回关快 会给你意想不到的惊喜呀🐤
文章目录
-
- ☀️scrapy爬取照片分析
-
-
- 🐱爬取照片展示
- 🐱介绍异步保存MySQL数据
- 🐱scrapy下载图片优势
- 🐱scrapy下载图片思路
-
- 🌸scrapy爬取照片实战部分
-
-
- 🌻前期准备
- 🌻rule规则
-
- 🌴scrapy爬取照片实代码部分
-
-
- 🌱settings部分
- 🌱starts部分
- 🌱items部分
- 🌱zcool部分
- 🌱pipelines部分(保存文件)
-
☀️scrapy爬取照片分析
🐱爬取照片展示
搞错了搞错了!怎么把我拍的搞上来了!
咱们要爬就爬好的,不好的咱还不爬呢!上菜
🐱介绍异步保存MySQL数据
1.使用twisted.enterprise.adbapi来创建连接池。
2.使用runInteraction来运行插入sql语句的函数。
3.在插入sql语句的函数中,第一个非self的参数就是cursor对象,使用这个对象执行sql语句。
🐱scrapy下载图片优势
反正就是scrapy好,very good。
🐱scrapy下载图片思路
🌸scrapy爬取照片实战部分
🌻前期准备
这里我们已经讲了很多遍了,第一机器人协议要进行改动,不改动的话大多部分网站都爬不了,最后还一脸懵逼,为什么呀?因为你蠢呀!第二要在settings中进行headers添加,当然了这一部分也是非常重要,反爬虫最基本基本的部分了。然后把管道打开,这里我们多介绍一点就是把
DOWNLOAD_DELAY = 3
打开,隔一段时间在进行下载防止下载太快,封掉ip。
🌻rule规则
这里我们要的地方大概就是两个部分,第一就是翻页的规则,第二就是我们详情页面的规则。
当我们进行翻页的时候右键点击详情发现??啥也没发现,也没有跳转页面的网址啥的,这可怎么办呢?但是我们可以看到什么变化了呢?主网址变化了
https://www.zcool.com.cn/discover?cate=0&page=1
当我们翻页的时候我们发现page=1是进行变化的,所以哈,我们直接复制page=1,到源码中进行找,最后发现了规律。初始网页定义为上方然后rule就是下方这块。
'.+page\d+'
详情url就很正常了!
'.+work/.+html'
嗯,自己动手奥!!!去看看这个世界吧!
剩下本节的难点就是文件保存部分啦我们在代码中进行讲解。
🌴scrapy爬取照片实代码部分
🌱settings部分
ROBOTSTXT_OBEY = False DOWNLOAD_DELAY = 3 DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36' } ITEM_PIPELINES = { 'imagedownload.pipelines.ImagedownloadPipeline': 300, #'scrapy.pipelines.images.ImagesPipeline': 1 } IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')#这里我们后面做出讲解
🌱starts部分
不多说
from scrapy import cmdline cmdline.execute("scrapy crawl lyw_spider".split(" "))
🌱items部分
class ImagedownloadItem(scrapy.Item): image_urls=scrapy.Field() images=scrapy.Field() title=scrapy.Field()
🌱zcool部分
rule规则依旧是翻页需要跟进,详情页面不需要跟进但是需要回馈给parse_detail函数。
from scrapy.spiders.crawl import CrawlSpider,Rule from scrapy.linkextractors import LinkExtractor from ..items import ImagedownloadItem
class ZcoolSpider(CrawlSpider): name = 'zcool' allowed_domains = ['zcool.com.cn'] start_urls = ['https://www.zcool.com.cn/discover?cate=0&page=1'] rules = ( Rule(LinkExtractor(allow='.+page\d+'),follow=True), Rule(LinkExtractor(allow='.+work/.+html'),callback="parse_detail",follow=False) )
def parse_detail(self, response): image_urls=response.xpath("//div[@class='photoInformationContent']//img/@src").getall()#这里一定要注意就是img一定要//,因为我们要取到所有的img title=response.xpath("//div[@class='contentTitle']/span/text()").get()#获取title item=ImagedownloadItem(title=title,image_urls=image_urls) yield item#返回给item
🌱pipelines部分(保存文件)
这里做一下记录,第一个库是进行传递。
我们ctrl双击imagespipeline,就会发现file_path函数,这里主要就是保存图片到full函数当中,如果我们想要更复杂的保存方式,那么我们可以重新写这个file_path,而get_media_requests函数的作用是把item提取出来,就是我想要的title等信息,其中get函数发生在下载照片之前,file函数发生在下载之后。
from scrapy.pipelines.images import ImagesPipeline from imagedownload import settings import os import re
class ImagedownloadPipeline(ImagesPipeline): def get_media_requests(self, item, info): media_requests=super(ImagedownloadPipeline, self).get_media_requests(item,info)#将item值取出来 for media_request in media_requests: media_request.item=item return def file_path(self, request, response=None, info=None, *, item=None): origin_path=super(ImagedownloadPipeline, self).file_path(request,response,info)#原始存储照片的路径,images/full title=request.item['title']#找到item中的title title = re.sub(r'[\\/:\*\?"<>\|]', '', title)#如果title中有这种符号 使用‘’代替掉 save_path=os.path.join(settings.IMAGES_STORE,title)#进行了一次网址拼接 目前是images/title if not os.path.exists(save_path): os.mkdir(save_path)#如果image下不存在这种文件 则创建这样的文件 image_name=origin_path.replace("full/","") return os.path.join(save_path, image_name)
这样我们就完成了对图片的下载过程。
🐸文章适合于所有的相关人士进行学习🐸
🐶各位看官看完了之后不要立刻转身呀🐶
🐼期待三连关注小小博主加收藏🐼
🐤小小博主回关快 会给你意想不到的惊喜呀🐤
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试