from . import extractors, logger ImportError: attempted relative import with no known parent package
时间: 2023-09-25 16:15:12 浏览: 53
这个错误意味着你尝试在没有已知父包的情况下进行相对导入。相对导入只能在有明确定义的包结构中使用。
为了解决这个问题,你可以考虑以下几种方法:
1. 确保你的文件是在一个包中,并且有一个已知的父包。你可以在文件顶部添加合适的包导入语句,例如:
```python
from mypackage import extractors
from mypackage import logger
```
2. 如果你的文件不在一个包中,而是在顶层目录中,你应该使用绝对导入,例如:
```python
import mypackage.extractors
import mypackage.logger
```
3. 如果你的文件是一个脚本文件而不是模块,你可以考虑将其转换为一个模块,并将其放入一个包中。
请根据你的实际情况选择适合的解决方法,并确保设置正确的包结构。
相关问题
cannot import name 'linkExtractor' from 'scrapy.linkextractors' (D:\apps\pachong\venv\Lib\site-packages\scrapy\linkextractors\__init__.py)
这个错误是因为在Scrapy中没有名为'linkExtractor'的模块。正确的模块名是'LinkExtractor',首字母L要大写。请确保你的代码中使用了正确的模块名。你可以尝试修改导入语句为以下形式:
```python
from scrapy.linkextractors import LinkExtractor
```
如果问题仍然存在,请确保你已经安装了正确的版本的Scrapy,并且模块路径正确。如果问题仍然无法解决,请提供更多的代码和错误信息,以便我能够更好地帮助你解决问题。
scrapy+mongodb案例
下面是一个使用 Scrapy 和 MongoDB 的简单示例,它将爬取豆瓣电影 Top 250 的数据并存储到 MongoDB 数据库中:
1. 安装 Scrapy 和 pymongo:
```
pip install scrapy pymongo
```
2. 创建 Scrapy 项目:
```
scrapy startproject douban
```
3. 在 `settings.py` 文件中配置 MongoDB:
```
MONGODB_HOST = 'localhost'
MONGODB_PORT = 27017
MONGODB_DBNAME = 'douban'
MONGODB_COLLECTION = 'movies'
```
4. 创建一个名为 `items.py` 的文件,定义要爬取的数据字段:
```
import scrapy
class DoubanItem(scrapy.Item):
title = scrapy.Field()
rating = scrapy.Field()
director = scrapy.Field()
actors = scrapy.Field()
year = scrapy.Field()
country = scrapy.Field()
category = scrapy.Field()
```
5. 创建一个名为 `douban_spider.py` 的文件,定义爬虫:
```
import scrapy
from douban.items import DoubanItem
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class DoubanSpider(CrawlSpider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
rules = (
Rule(LinkExtractor(allow=('subject/\d+/$')), callback='parse_item'),
Rule(LinkExtractor(allow=('top250\?start=\d+')), follow=True)
)
def parse_item(self, response):
item = DoubanItem()
item['title'] = response.css('h1 span::text').get()
item['rating'] = response.css('strong.rating_num::text').get()
item['director'] = response.css('a[rel="v:directedBy"]::text').get()
item['actors'] = response.css('a[rel="v:starring"]::text').getall()
item['year'] = response.css('span.year::text').get()
item['country'] = response.css('span[property="v:initialReleaseDate"]::text').re_first(r'(\S+)\s+\(\S+\)')
item['category'] = response.css('span[property="v:genre"]::text').getall()
yield item
```
6. 运行爬虫:
```
scrapy crawl douban
```
7. 在 MongoDB 中查看数据:
```
> use douban
> db.movies.find().pretty()
```