上篇已经介绍了 图片的爬取,后来觉得不太好,每次爬取的图片 都在一个文件下,不方便区分,且数据库中没有爬取的时间标识,不方便后续查看 数据时何时爬取的,所以这里进行了局部修改

修改一:修改爬虫执行方式

之前爬虫的执行 是通过在终端输入命令:scrapy crawl spiderName  执行

缺点:

1、需要记住并输入命令;

2、需要在终端切换到爬虫上一级目录下执行。

创建执行入口

如图

代码如下

# FileName : RunSpider.py
# Author : Adil
# DateTime : 2018/12/4 2:51 PM
# SoftWare : PyCharm from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings process = CrawlerProcess(get_project_settings()) # 此处添加 执行爬虫 名字,具体可以查看 源码
process.crawl('JdwSpider') process.start()

修改二:修改图片存放路径

之前是在执行路径下依照spiderName 创建了一个文件夹,用来存放图片。

缺点:

1、每次执行爬虫所有图片都会存放在该文件下,日积月累,图片会越来越多,不方便查找和归类

创建新的文件路径

根据爬取日期创建文件进而分类,方便查看不同时间对应的爬取结果

展示结果如下:

修改三:数据增加爬取时间

如图,方便以爬取时间进行区分爬取内容。

最后修改后代码如下:


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

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import os
import urllib
import time
import common.DBHandle as DBHandle class JiandanwPipeline(object): def __init__(self):
'''
初始化文件路径及 爬取时间
'''
# 获取当前路径
currentPath = os.getcwd()
# 拼接图片存放路径
file_path = os.path.join(currentPath, 'JdwSpider')
# 增加 按日期创建文件
localTime = time.localtime(time.time())
localTimeStrs = time.strftime("%Y-%m-%d %H:%M:%S", localTime)
# 再次拼接路径
file_path = os.path.join(file_path, localTimeStrs)
if not os.path.exists(file_path):
os.makedirs(file_path)
# 初始化 两个 变量,方便 后面的 方法使用
self.file_path = file_path
self.localTimeStrs = localTimeStrs
# 数据库连接 这里的 数据库信息,因为是本地数据库,后面如果是公司数据库 不方便透露的话,可以存放到配置文件中
host = '127.0.0.1'
username = 'adil'
password = 'helloyyj'
database = 'AdilTest'
port = 3306
# 实例化 数据库 连接
self.DbHandle = DBHandle.DataBaseHandle(host, username, password, database, port) def process_item(self, item, spider):
''' 爬虫文件数据处理函数 ''' # 这里是一页 算一个 item ,所以如果 将 文件信息 写在这里,会导致一页创建一次,所以 放在初始化函数内进行
# # 获取当前路径
# currentPath = os.getcwd()
# # 拼接图片存放路径
# file_path = os.path.join(currentPath, spider.name)
#
# # 增加 按日期创建文件
# localTime = time.localtime(time.time())
# localTimeStrs = time.strftime("%Y-%m-%d %H:%M:%S", localTime)
# # 再次拼接路径
# file_path = os.path.join(file_path, localTimeStrs)
#
# if not os.path.exists(file_path):
# os.makedirs(file_path) for image_url in item['image_urls']:
# 截图图片链接
list_name = image_url.split('/')
# 获取图片名称
file_name = list_name[len(list_name) - 1] # 图片名称
# 补全图片路径
path_name = os.path.join(self.file_path,file_name)
# 获取有效的url 因为 image_url = //wx4.sinaimg.cn/mw600/66b3de17gy1fxo6jis4iej21ma0u0x6r.jpg
image_url = 'http:' + image_url
# 此处执行 数据库插入,将 图片名称、url 插入到数据库 注意 这里的 values('占位符 一定要用 引号引起来,要不然执行不成功,血的教训')
sql = "insert into JdwSpider(image_name,image_url,Spider_time) values ('%s','%s','%s')" % (file_name,image_url,self.localTimeStrs)
# 如果不执行插入,可以注释改该行代码
self.DbHandle.insertDB(sql) # 图片保存
with open(path_name, 'wb') as file_writer:
conn = urllib.request.urlopen(image_url) # 下载图片
# 保存图片
file_writer.write(conn.read())
file_writer.close() return item def close_spider(self,spider):
''' 定义爬虫结束处理函数 此处会在 爬虫结束后执行该方法 '''
# 关闭数据库,
print('****'*50)
print('数据库关闭')
self.DbHandle.closeDb()

Python Scrapy 爬取煎蛋网妹子图实例(二)的更多相关文章

  1. Python Scrapy 爬取煎蛋网妹子图实例(一)

    前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...

  2. python爬虫–爬取煎蛋网妹子图片

    前几天刚学了python网络编程,书里没什么实践项目,只好到网上找点东西做. 一直对爬虫很好奇,所以不妨从爬虫先入手吧. Python版本:3.6 这是我看的教程:Python - Jack -Cui ...

  3. python爬虫爬取煎蛋网妹子图片

    import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...

  4. Python 爬虫 爬取 煎蛋网 图片

    今天, 试着爬取了煎蛋网的图片. 用到的包: urllib.request os 分别使用几个函数,来控制下载的图片的页数,获取图片的网页,获取网页页数以及保存图片到本地.过程简单清晰明了 直接上源代 ...

  5. Python 爬取煎蛋网妹子图片

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-24 10:17:28 # @Author : EnderZhou (z ...

  6. selenium爬取煎蛋网

    selenium爬取煎蛋网 直接上代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriv ...

  7. python3爬虫爬取煎蛋网妹纸图片(上篇)

    其实之前实现过这个功能,是使用selenium模拟浏览器页面点击来完成的,但是效率实际上相对来说较低.本次以解密参数来完成爬取的过程. 首先打开煎蛋网http://jandan.net/ooxx,查看 ...

  8. scrapy从安装到爬取煎蛋网图片

    下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/pip install wheelpip install lxmlpip install pyopens ...

  9. 爬虫实例——爬取煎蛋网OOXX频道(反反爬虫——伪装成浏览器)

    煎蛋网在反爬虫方面做了不少工作,无法通过正常的方式爬取,比如用下面这段代码爬取无法得到我们想要的源代码. import requests url = 'http://jandan.net/ooxx' ...

随机推荐

  1. 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 20165211

    目录 2018-2019-2 <网络对抗技术>Exp3 免杀原理与实践 20165211 1. 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法 ...

  2. 20145311王亦徐 《网络对抗技术》 Web安全基础实践

    2014531王亦徐 <网络对抗技术> Web安全基础实践 实验内容 利用WebGoat平台尝试了一些XSS.CSRF.SQL注入攻击 基础问题回答 1.SQL注入攻击原理,如何防御原理: ...

  3. memory cache 和 disk cache

    memory cache简介:MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载资源,而直接从内存中获取.Webkit早已支持memoryCache. 目前Webki ...

  4. Ubuntu18.04 一些好用的扩展

    原文:https://www.lulinux.com/archives/2589 一些好用的扩展: United:https://www.gnome-look.org/p/1167950/ dynam ...

  5. 2-sat相关复习

    2-sat相关复习 noi曾经考过,谁能说得准呢 sat问题 通俗的sat问题表述一般是这样的:有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案. ...

  6. 【做题】arc080_f-Prime Flip——转换、数论及匹配

    题意:有一个无限序列,其中有\(n\)个位置上的数为\(1\),其余都是\(0\).你可以进行若干次操作,每次选取序列上的一个区间\([l,r)\),满足\(r-l\)为奇质数,将在这个区间上的数都异 ...

  7. 【做题】arc068_e-Snuke Line——利用特殊性质分讨

    显然,对于所有跨度暴力扫一遍的复杂度本身只有\(O(n \log n)\). 容易想到在每一个到达的位置加上覆盖这个位置的区间数.剩下的问题就在于如何处理覆盖了多个位置的区间. 记录已访问或去重都是难 ...

  8. 集合03_Map

    Map集合总览 保存映射关系key-value键值对,键唯一,值可以重复,Map和Set的实现类相似 Entry是Map的内部类 Map接口中常用的方法: void clear() Set keySe ...

  9. BZOJ 3707 圈地

    闲扯 BZOJ权限题,没有权限,哭了 然后DBZ不知道怎么回事,\(O(n^3)\)直接压过去了... 备忘 叉积的计算公式\(x_1y_2\) 思路 n^3 暴力枚举显然 n^2 正解的思路有点神, ...

  10. P4213 【模板】杜教筛(Sum)(杜教筛)

    根据狄利克雷卷积的性质,可以在低于线性时间复杂度的情况下,求积性函数前缀和 公式 \[ 求\sum_{i=1}^{n}\mu(i) \] 因为\(\mu*I=\epsilon\) 所以设\(h=\mu ...