scrapy学习案例
文章目录
前言
Scrapy 是一个快速高级网络爬行和Web 刮擦框架,用于爬取网站并从其页面中提取结构化数据。它可以用于各种目的,从数据挖掘到监控和自动测试
详情可查看官方文档
一、scrapy创建项目
1.首先在自己所创建的目录下打开终端(在安装好scrapy前提下)
输入以下命令scrapy startproject (项目名):
scrapy startproject scrapy_one_day
创建成功会在当前路径下创建一个项目
它的结构如下
- 接下来在命令行输入scrapy genspider (爬虫程序名) (爬取网页域名) :
需要先跳到刚刚创建的项目目录中即
cd ./scrapy_one_day
scrapy genspider ivsky ivsky.com
创建成功:
在spider中就会生成一个爬虫程序
本次学习主要修改ivsky.py实现scrapy爬取图片并保存到本地。
二、代码部分
本次对天堂图片网进行爬取
1.爬取数据
代码如下(示例):
这里修改的是ivsky.py中parse方法
# xpath选择class属性为pli节点下的li节点
imgs = response.xpath('//ul[@class="pli"]/li')
# 遍历数据
for img in imgs:
# 查找当前节点下img节点的src属性通过extract方法提取出来也可以使用get方法
photo = img.xpath('.//img/@src').extract()
# 当photo不为空执行保存方法
if photo:
# 注意此时photo是列表形式如果不加[0]下面写的保存方法不可用
self.save_photo(photo[0])
本次使用xpath进行选择(过程):
打开网页按F12
可以右击数据位置选择复制xpath,
也可以自己写(复制可能会出现查找不到内容的情况,建议自己写)
如果对自己写的没有把握可以通过xpath-helper插件进行验证(可进网盘下载,在谷歌插件中导入解压后文件所在目录即可)。
提取码:
6chu
快捷键启动
Ctrl+Shift+x
2.保存图片到本地
上述代码中,photo列表为图片链接
在同一个类中加入保存的方法(需要在前导入random和requests模块。
代码如下:
def save_photo(self, urls):
response = requests.get('https:'+str(urls))
# 图片命名??.jpg
file_path = '{0}{1}'.format(random.randint(0,10000), '.jpg')
# 读取图片内容转化为二进制内容(图片储存方式为二进制
# 因此使用content方法将源码转换为二进制,而不使用text方法)
files = response.content
# 因为是二进制所以写入使用wb
with open(f'D:/ImageSpider/{file_path}', 'wb') as f:
f.write(files)
f.close()
在命令行输入scrapy crawl (爬虫程序名):
scrapy crawl ivsky
没有报错则执行成功
保存后的目录
3.完整代码
import scrapy
import requests
import random
class IvskySpider(scrapy.Spider):
name = 'ivsky' # 爬虫程序名称
allowed_domains = ['ivsky.com'] # 爬取域名
# 通过观察网站每页的情况修改代码
start_urls = [f'http://ivsky.com/tupian/meinv_t50/index_{n}.html' for n in range(1, 12)]
def parse(self, response):
# xpath选择class属性为pli节点下的li节点
imgs = response.xpath('//ul[@class="pli"]/li')
# 遍历数据
for img in imgs:
# 查找当前节点下img节点的src属性通过extract方法提取出来也可以使用get方法
photo = img.xpath('.//img/@src').extract()
# 当photo不为空执行保存方法
if photo:
# 注意此时photo是列表形式如果不加[0]下面写的保存方法不可用
self.save_photo(photo[0])
def save_photo(self, urls):
response = requests.get('https:'+str(urls))
# 图片命名??.jpg
file_path = '{0}{1}'.format(random.randint(0,10000), '.jpg')
# 读取图片内容转化为二进制内容(图片储存方式为二进制
# 因此使用content方法将源码转换为二进制,而不使用text方法)
files = response.content
# 因为是二进制所以写入使用wb
with open(f'D:/ImageSpider/{file_path}', 'wb') as f:
f.write(files)
f.close()
在项目中setting.py文件中修改,可改可不改,如果出现重定向等问题则修改后再试
Original: https://blog.csdn.net/weixin_44737987/article/details/118973543
Author: 一二一O
Title: scrapy学习-第一天
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/792993/
转载文章受原作者版权保护。转载请注明原作者出处!