爬爬爬!使用scrapy爬取你懂得的网站自建数据库!
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爬取你懂得的网站自建数据库!相关推荐
- 爬爬爬——了解scrapy框架工作流程
丧丧的春节过了,又到了学习的季节--熟悉scrapy框架 为什么选择用框架: 不用重复造轮子,scrapy 底层是异步框架 twisted ,吞吐量高. 1.scrapy 的基础概念: scrapy ...
- scrapy——抓取知乎
主要目标是: · 从如何评价X的话题下开始抓取问题,然后开始爬相关问题再循环 · 对于每个问题抓取标题,关注人数,回答数等数据 1 创建项目 $ scrapy start ...
- scrapy爬取斗图表情
用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html ...
- python从网上获取数据失败怎么解决_求助:scrapy爬取数据失败,反复调试都不成功...
目标:爬取某一学习网站上课程信息,前期调试仅获取课程名称 爬虫文件: import scrapy from xtzx.items import XtzxItem from scrapy.http im ...
- mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库
(大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...
- 【爬虫】Scrapy爬取腾讯社招信息
目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...
- Python scrapy爬取京东,百度百科出现乱码,解决方案
Python scrapy爬取京东 百度百科出现乱码 解决方案 十分想念顺店杂可... 抓取百度百科,出现乱码 把页面源码下载下来之后,发现全是乱码,浏览器打开 但是浏览器链接打开就没有乱码 以下是浏 ...
- Scrapy爬取姓名大全,看看那个名字最受父母青睐
点击上方"AI搞事情"关注我们 最近在做的项目需要用到名字的数据,可哪儿有这么多名字给我用呢?经一通搜索,不仅找到一个神奇的网站姓名大全,还有人开源了爬虫的代码.让我一番修改,得到 ...
- 四十三、Scrapy 爬取前程无忧51jobs
@Author:Runsen 之前爬了拉钩,爬了boss ,你认为我会放过51jobs 吗 这是不可能的,今日用下scrapy 来爬 51jobs,前程无忧 关于新建项目和spider 不说了,今日用 ...
最新文章
- 独家 | PyCaret 2.1横空出世-有什么新的内容?
- RMAN的一些术语解释
- Spring5参考指南:Environment
- mysql 的标识符_MySQL查询或标识符在Jupyter中太长?
- centos 调整home分区xfs_centos下扩容根分区(针对xfs和ext4不同文件系统)
- 我看ITIL在中国(六):如何建设有中国特色的IT运维管理平台【三】
- 和与余数的和同余理解_余数与同余解析
- 如何做出有价值的竞品分析?
- 设计自己的基于Selenium 的自动化测试框架-Java版(2) - 定义自己的工作流程
- 使用Xshell连接Linux虚拟机
- python-制作手机通讯录导入的vcf格式文件,txt格式转vcf格式
- ORACLE数据库与Navicat安装 随手笔记
- Xshell新手的下载及安装教程(超详细)
- Win7常见问题和技巧整
- random.shuffle(lst)
- 增强型脉冲宽度调制模块(ePWM)图解
- AirtestIDE1.2.13的安卓手机设置自动初始化功能
- flac格式如何转mp3,3招帮你搞定
- 统计学习方法——K近邻模型
- Moodle平台题库建设技术
热门文章
- 华南农业大学c语言怎么考,华南农业大学期末考试试卷 C语言考试合集
- 中国蚁剑AntSword反制 RCE漏洞复现 windows环境上反弹shell 吊打攻击你的黑客
- 几种遍历数组的方法原理
- CSUST 2007 我爱吃烧烤 题解(状压dp)
- 老板:你们和外包有什么区别?
- 人民银行lpr利率最新2020年人民银行lpr利率查询 2020年lpr利率
- 什么是防关联浏览器?
- 阿里云企业邮箱发送邮件失败,在本地测试可行,在云服务器上失败
- 【笔记】wlan - 基础概念(无线、wifi、常见协议、频谱、信道、ap部署、案例)
- 小融资 大趋势 小嗨互联网融资研究分析 20190101-20190104