1、检查我们的scrapy版本。截至2020年11月29日,scrapy的版本为2.4.0,方法是在cmd命令行中 scrapy version

如果你也与我一样,使用这个版本,那么可以确定,你可以复现我的这篇教程。

2、创建项目。在cmd中scrapy startproject text

这里我使用了text这个名字,如果你喜欢别的,也可以改成别的任何名字。如果你是新手,那么建议你还是像我一样照做,不然会在后面的代码里混淆掉。

2.1 创建一只爬虫。正如你在命令行中看到的提示那样,一般我们在创建完一个项目之后,马上就创建一只蜘蛛。

这时,我们已经完成了一只蜘蛛的创建,我们可以检查一下。使用pycharm打开这个项目,我们发现确实已经有一个example.py,这就是我们创建的蜘蛛的模块了。

这时,我们的准备工作算是完成了。

3、正式开始

3.1 定义我们需要的内容items.py

import scrapy
from scrapy.item import Item,Field
class TextItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = Field()  # 标题number = Field()  # 番号issuedate = Field()  # 发行时间actress = Field()  # 演员type = Field()  # 类型magent = Field()  # 磁力链接size = Field()  # 大小image_urls = scrapy.Field()  # 存储图片下载地址,必须是list列表形式,是下一步下载图片时图片的网页地址image = scrapy.Field()  # 存储图片下载地址及下载后的存储位置(相对路径)imagepath = scrapy.Field()  # 图片本地存储的位置torrent_urls = scrapy.Field()torrent = scrapy.Field()torrent_magnet = scrapy.Field()pass

3.2 编写蜘蛛。example.py

import scrapy
from text.items import TextItem  # 此处如果报错是pyCharm的原因
from scrapy.http import Requestclass ExampleSpider(scrapy.Spider):name = 'example'allowed_domains = ['bbs.xxxxxxxx.site']#抱歉这里是某网站的域名start_urls = ['https://xxxxxxxxxx',#抱歉这里是某网站的地址:)]def parse(self, response):book_urls = response.xpath('//td/a[@class="subject"]/@href').extract()for book_url in book_urls:book_url ="https://bbs.ojxqsc.site/2048/" + book_urlyield Request(book_url, callback=self.parse_read)def parse_read(self, response):title = str(response.xpath('//td[@class="tal h"]/text()').extract_first()).replace("\n主题 : 【新片原档首发】 ","")title = title.replace("\n","")title = title.replace("主题 : ","")title = title.replace("/", "")if (str(response.xpath('//div[@class="f14"]/text()').extract()).find('品番: ') >= 0):number = str(response.xpath('//div[@class="f14"]/text()').extract()).split('品番: ')[1].split("'")[0]else:number = 'null'if (str(response.xpath('//div[@class="f14"]/text()').extract()).find('影片容量:') >= 0):size =str(response.xpath('//div[@class="f14"]/text()').extract()).split('影片容量:')[1].split("'")[0]else:size ='null'if (str(response.xpath('//div[@class="f14"]/text()').extract()).find('発売日: ') >= 0):issuedate=str(response.xpath('//div[@class="f14"]/text()').extract()).split('発売日: ')[1].split("'")[0]else:issuedate='null'if (str(response.xpath('//div[@class="f14"]/text()').extract()).find('出演者: ')>=0):actress=str(response.xpath('//div[@class="f14"]/text()').extract()).split('出演者: ')[1].split("'")[0]else:actress = 'null'if(str(response.xpath('//*[@id="read_tpc"]/img/@src').extract_first())!="None"):print("筛选图片地址:"+str(response.xpath('//*[@id="read_tpc"]/img/@src').extract_first()))image = response.xpath('//*[@id="read_tpc"]/img/@src').extract_first()else:image = response.xpath('//*[@id="read_tpc"]/a[1]/img/@src').extract_first()  # 图片地址torrent_urls = response.xpath('//*[@id="read_tpc"]/a/@href').extract()for torrent_url in torrent_urls:print("所有的网址是:"+str(torrent_url))if("download" in str(torrent_url)):print("现在的网址是:" +str(torrent_url))yield Request(torrent_url, meta = {'image_urls':[image],'title':title,'number':number,'size':size,'issuedate':issuedate,'actress':actress},callback=self.parse_magnet, dont_filter=True)else:print("oh no!")def parse_magnet(self, response):torrent_magnet = response.xpath('//*[@class="uk-button "]/@href').extract_first()  # 图片地址print("现在的种子的内容是:" + str(torrent_magnet))item = TextItem()item['image_urls'] = response.meta['image_urls']item['title'] = response.meta['title']item['number']=response.meta['number']item['size'] = response.meta['size']item['issuedate'] = response.meta['issuedate']item['actress'] = response.meta['actress']print("图片地址:" + str(item['image_urls']))print("文件路径:" + str(item['title']))imagepath = str(response.meta['title'])item['imagepath'] = "G:\GOO\\"+ imagepath+".jpg"item['torrent_magnet'] = str(torrent_magnet)yield item

3.3 编写管道 pipelines.py

from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request
import pymysql.cursorsclass TextPipeline(ImagesPipeline):def get_media_requests(self, item, info):for image_url in item['image_urls']:yield Request(image_url, meta={'mid_item': item['title']})def file_path(self, request, response=None, info=None):title = request.meta['mid_item']+".jpg"print("现在的标题是:"+title)return title
class MySQLPipeline(object):def __init__(self):# 连接数据库self.connect = pymysql.connect(host='127.0.0.1',  # 数据库地址port=3306,  # 数据库端口db='liab',  # 数据库名user='root',  # 数据库用户名passwd='123456',  # 数据库密码charset='utf8',  # 编码方式use_unicode=True)# 通过cursor执行增删查改self.cursor = self.connect.cursor()def process_item(self, item, spider):self.cursor.execute("""insert into code(title,number,size,issuedate,actress,imageurl,torrentmagnet)value (%s,%s,%s,%s,%s,%s,%s)""",  # 纯属python操作mysql知识,不熟悉请恶补(item['title'],item['number'],item['size'],item['issuedate'],item['actress'],item['imagepath'],# item里面定义的字段和表字段对应item['torrent_magnet'],  # item里面定义的字段和表字段对应))# 提交sql语句self.connect.commit()return item  # 必须实现返回

3.4 编写设置 setting.py

BOT_NAME = 'text'
SPIDER_MODULES = ['text.spiders']
NEWSPIDER_MODULE = 'text.spiders'
HTTPERROR_ALLOWED_CODES = [403]
HTTPERROR_ALLOWED_CODES = [404]
ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {'text.pipelines.TextPipeline': 1,'text.pipelines.MySQLPipeline': 300,
}

到这里,我们的项目就结束了。简单说一下它的功能。第一是将封面下载到本地。第二是将其他字段保存在本地的数据库中,封面图片在数据库中的保持方式为图片的地址,而不是图片的数据流。

4、让我们测试一下!

4.1 项目的启动。我们可以在pycharm中的terminal窗口键入scrapy crawl example

也可以在cmd窗口中使用相同的方法启动。

4.2 你可以在你的保存目录中找到这些图片。并且,你也可以在数据库中找到这些数据。

如果有什么地方不懂,欢迎留言或私信!

爬爬爬!使用scrapy爬取你懂得的网站自建数据库!相关推荐

  1. 爬爬爬——了解scrapy框架工作流程

    丧丧的春节过了,又到了学习的季节--熟悉scrapy框架 为什么选择用框架: 不用重复造轮子,scrapy 底层是异步框架 twisted ,吞吐量高. 1.scrapy 的基础概念: scrapy ...

  2. scrapy——抓取知乎

    主要目标是: ·       从如何评价X的话题下开始抓取问题,然后开始爬相关问题再循环 ·       对于每个问题抓取标题,关注人数,回答数等数据 1    创建项目 $ scrapy start ...

  3. scrapy爬取斗图表情

    用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html ...

  4. python从网上获取数据失败怎么解决_求助:scrapy爬取数据失败,反复调试都不成功...

    目标:爬取某一学习网站上课程信息,前期调试仅获取课程名称 爬虫文件: import scrapy from xtzx.items import XtzxItem from scrapy.http im ...

  5. mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库

    (大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...

  6. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

  7. Python scrapy爬取京东,百度百科出现乱码,解决方案

    Python scrapy爬取京东 百度百科出现乱码 解决方案 十分想念顺店杂可... 抓取百度百科,出现乱码 把页面源码下载下来之后,发现全是乱码,浏览器打开 但是浏览器链接打开就没有乱码 以下是浏 ...

  8. Scrapy爬取姓名大全,看看那个名字最受父母青睐

    点击上方"AI搞事情"关注我们 最近在做的项目需要用到名字的数据,可哪儿有这么多名字给我用呢?经一通搜索,不仅找到一个神奇的网站姓名大全,还有人开源了爬虫的代码.让我一番修改,得到 ...

  9. 四十三、Scrapy 爬取前程无忧51jobs

    @Author:Runsen 之前爬了拉钩,爬了boss ,你认为我会放过51jobs 吗 这是不可能的,今日用下scrapy 来爬 51jobs,前程无忧 关于新建项目和spider 不说了,今日用 ...

最新文章

  1. 独家 | PyCaret 2.1横空出世-有什么新的内容?
  2. RMAN的一些术语解释
  3. Spring5参考指南:Environment
  4. mysql 的标识符_MySQL查询或标识符在Jupyter中太长?
  5. centos 调整home分区xfs_centos下扩容根分区(针对xfs和ext4不同文件系统)
  6. 我看ITIL在中国(六):如何建设有中国特色的IT运维管理平台【三】
  7. 和与余数的和同余理解_余数与同余解析
  8. 如何做出有价值的竞品分析?
  9. 设计自己的基于Selenium 的自动化测试框架-Java版(2) - 定义自己的工作流程
  10. 使用Xshell连接Linux虚拟机
  11. python-制作手机通讯录导入的vcf格式文件,txt格式转vcf格式
  12. ORACLE数据库与Navicat安装 随手笔记
  13. Xshell新手的下载及安装教程(超详细)
  14. Win7常见问题和技巧整
  15. random.shuffle(lst)
  16. 增强型脉冲宽度调制模块(ePWM)图解
  17. AirtestIDE1.2.13的安卓手机设置自动初始化功能
  18. flac格式如何转mp3,3招帮你搞定
  19. 统计学习方法——K近邻模型
  20. Moodle平台题库建设技术

热门文章

  1. 华南农业大学c语言怎么考,华南农业大学期末考试试卷 C语言考试合集
  2. 中国蚁剑AntSword反制 RCE漏洞复现 windows环境上反弹shell 吊打攻击你的黑客
  3. 几种遍历数组的方法原理
  4. CSUST 2007 我爱吃烧烤 题解(状压dp)
  5. 老板:你们和外包有什么区别?
  6. 人民银行lpr利率最新2020年人民银行lpr利率查询 2020年lpr利率
  7. 什么是防关联浏览器?
  8. 阿里云企业邮箱发送邮件失败,在本地测试可行,在云服务器上失败
  9. 【笔记】wlan - 基础概念(无线、wifi、常见协议、频谱、信道、ap部署、案例)
  10. 小融资 大趋势 小嗨互联网融资研究分析 20190101-20190104