scrapy在python爬虫中建立目录的方法
更新时间:2023-07-10什么是Scrapy
Scrapy是一个使用Python编写的爬虫框架。它可以用于快速、高效地抓取网站上的大量数据,并将这些数据存储到本地或远程服务器上。Scrapy提供了强大的XPath和CSS选择器语法,使得开发人员可以灵活地从不同的网站中抽取所需的信息。
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.org']
def parse(self, response):
# your spider logic
如何在Scrapy中建立目录
建立目录是爬虫任务中重要的一环。在Scrapy中,你可以通过设置自定义管道来建立目录。在管道中,你可以根据需要创建文件夹和文件,将网页数据保存到这些文件中。
import os
class MyPipeline(object):
def __init__(self):
self.path = './data'
if not os.path.exists(self.path):
os.mkdir(self.path)
def process_item(self, item, spider):
filename = item['id'] + '.txt'
filepath = os.path.join(self.path, filename)
with open(filepath, 'w') as f:
f.write(item['content'])
如何设置文件名
在爬虫任务中,往往需要将数据保存到指定名称的文件中。在Scrapy中,你可以通过设置item的字段来指定文件名:
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.org']
def parse(self, response):
item = {}
item['id'] = '123'
item['content'] = response.body
return item
在这个例子中,我们将数据保存到文件"123.txt"中:
class MyPipeline(object):
def process_item(self, item, spider):
filename = item['id'] + '.txt'
with open(filename, 'w') as f:
f.write(item['content'])
如何防止重复数据
在爬虫任务中,经常需要处理重复数据。在Scrapy中,你可以通过设置一个去重器(deduplicate)来避免重复数据的出现。
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.org']
def parse(self, response):
item = {}
item['id'] = '123'
item['content'] = response.body
return item
在这个例子中,我们将id字段作为唯一标识,在管道中使用Scrapy提供的去重器。
import scrapy
from scrapy.exceptions import DropItem
class MyPipeline(object):
def __init__(self):
self.seen_ids = set()
def process_item(self, item, spider):
if item['id'] in self.seen_ids:
raise DropItem('Duplicate item found: %s' % item['id'])
else:
self.seen_ids.add(item['id'])
# do your processing
return item