Python Scrapy 爬取煎蛋网妹子图实例(二)
上篇已经介绍了 图片的爬取,后来觉得不太好,每次爬取的图片 都在一个文件下,不方便区分,且数据库中没有爬取的时间标识,不方便后续查看 数据时何时爬取的,所以这里进行了局部修改
修改一:修改爬虫执行方式
之前爬虫的执行 是通过在终端输入命令: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 爬取煎蛋网妹子图实例(二)的更多相关文章
- Python Scrapy 爬取煎蛋网妹子图实例(一)
前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...
- python爬虫–爬取煎蛋网妹子图片
前几天刚学了python网络编程,书里没什么实践项目,只好到网上找点东西做. 一直对爬虫很好奇,所以不妨从爬虫先入手吧. Python版本:3.6 这是我看的教程:Python - Jack -Cui ...
- python爬虫爬取煎蛋网妹子图片
import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...
- Python 爬虫 爬取 煎蛋网 图片
今天, 试着爬取了煎蛋网的图片. 用到的包: urllib.request os 分别使用几个函数,来控制下载的图片的页数,获取图片的网页,获取网页页数以及保存图片到本地.过程简单清晰明了 直接上源代 ...
- Python 爬取煎蛋网妹子图片
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-24 10:17:28 # @Author : EnderZhou (z ...
- selenium爬取煎蛋网
selenium爬取煎蛋网 直接上代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriv ...
- python3爬虫爬取煎蛋网妹纸图片(上篇)
其实之前实现过这个功能,是使用selenium模拟浏览器页面点击来完成的,但是效率实际上相对来说较低.本次以解密参数来完成爬取的过程. 首先打开煎蛋网http://jandan.net/ooxx,查看 ...
- scrapy从安装到爬取煎蛋网图片
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/pip install wheelpip install lxmlpip install pyopens ...
- 爬虫实例——爬取煎蛋网OOXX频道(反反爬虫——伪装成浏览器)
煎蛋网在反爬虫方面做了不少工作,无法通过正常的方式爬取,比如用下面这段代码爬取无法得到我们想要的源代码. import requests url = 'http://jandan.net/ooxx' ...
随机推荐
- P1382 楼房
P1382 楼房 每个矩形拆成2个坐标按$x$轴排序,蓝后$multiset$维护最高值. #include<iostream> #include<cstring> #incl ...
- hibernate validator自定义校验注解以及基于服务(服务组)的校验
hibernate validator是Bean Validation 1.1 (JSR 349) Reference Implementation,其广泛的应用在mvc的参数校验中,尤其是使用服务端 ...
- unknown variable 'log_bin_basename'
今天在处理一问题时,在my.cnf中设置了log_bin_basename=/DATA/log-bin,在启动时报unknown variable 'log_bin_basename' 经查mysql ...
- Linux 编程简单示例代码
Linux进程管理 编辑a.c 文件 #include <stdio.h> #include <unistd.h> int main() { printf( "Mes ...
- Linux基础笔记——RAID
关于RAID RAID0:理论上来说一个有n块磁盘组成的raid0,它的读写是单个磁盘性能的n倍,具有低成本,高性能,低安全性,可用于可靠性不高的应用,如:视频.音频.临时数据存储等 RAID1:也称 ...
- 搭建ldap服务器及web管理服务--phpldapadmin
系统版本:centos6 安装配置openldap: yum install openldap openldap-servers openldap-clients openldap-devel com ...
- Linux系统PWM驱动【转】
本文转载自:https://blog.csdn.net/BorntoX/article/details/51879786 硬件平台:IMX6 内核版本:kernel3.0.35 在linux内核中有一 ...
- 修改userdata的分区大小【转】
本文转载自:https://blog.csdn.net/mike8825/article/details/49833833 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
- linux内核中的PTP clock是什么?
答: Precise Time Protocol(PTP),这是一种高精度时间同步协议,PTP是在硬件级实现的,因此需要硬件支持才能实现高精度时间同步
- 转载:Systemd 命令
目录 一.由来 二.Systemd 概述 三.系统管理 3.1 systemctl 3.2 systemd-analyze 3.3 hostnamectl 3.4 localectl 3.5 time ...