urlparse: ModuleNotFoundError,大概在 Python2.7 和 conda 下
urlparse: ModuleNotFoundError, presumably in Python2.7 and under conda
我正在尝试 运行 我自己的 scrapy 项目。该代码基于一本写得很好的书,作者为书中示例的 运行 脚本提供了一个很好的 VM 游乐场。在 VM 中,代码工作正常。但是,在尝试自己练习时,我收到以下错误:
File "(frozen importlib._bootstrap)", line 978, in _gcd_import
File "(frozen importlib._bootstrap)", line 961, in _find_and_load
File "(frozen importlib._bootstrap)", line 950, in _find_and_load_unlocked
File "(frozen importlib._bootstrap)", line 655, in _load_unlocked
File "(frozen importlib._bootstrap_external)", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "C:\users\me\dictionary_com\spiders\basic.py", line 3, in <module>
import urlparse
ModuleNotFoundError: No module named 'urlparse'
我最初有 Python 3 运行ning 在我的主要外部机器上(在 VM 之外),似乎作者正在使用 Python 2(仍然没有'不知道 Atom 编辑器的 flake 8 是如何理解这一点的?)。在查看 urllib 的 Python 2/3 问题后,(python 2 and 3 extract domain from url and Heroku logs say "No module named 'urlparse'" when I use import urlparse and https://github.com/FriendCode/gittle/issues/49) 我尝试了这些链接中提供的各种导入解决方案。我安装了 Python 2.7(并验证它已通过 $python -V -->python2.7.13 设置为路径。我什至尝试创建一个 conda 环境以确保它是拉 python2.7.13.
我的spider.py脚本如下:
import datetime
import urlparse
import socket
import scrapy
from Terms.items import TermsItem
# you have to import processors from scrapy.loader to use it
from scrapy.loader.processors import MapCompose, Join
# you have to import Itemloader from scrapy.loader to use it
from scrapy.loader import ItemLoader
class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
start_urls = [i.strip() for i in open('lused.urls.txt').readlines()]
def parse(self, response):
l = ItemLoader(item=TermsItem(), response=response)
# Load fields using XPath expressions
l.add_xpath('term', '//h1[@class="head-entry"][1]/text()',
MapCompose(unicode.strip, unicode.title))
l.add_xpath('definition', '//*[@class="def-list"][1]/text()',
MapCompose(unicode.strip, unicode.title))
# Housekeeping fields
l.add_value('url', response.url)
l.add_value('project', self.settings.get('BOT_NAME'))
l.add_value('spider', self.name)
l.add_value('server', socket.gethostname())
l.add_value('date', datetime.datetime.now())
return l.load_item()
我的item.py脚本如下:
from scrapy.item import Item, Field
class TermsItem(Item):
# Primary fields
term = Field()
definition = Field()
# Housekeeping fields
url = Field()
project = Field()
spider = Field()
server = Field()
date = Field()
在atom编辑器中,flake8 python检查器flags/underlines(引用:'导入但未使用):
'import urlparse'
'from scrapy.loader.processors import MapCompose, Join'
但是,当我在 Atom 编辑器中打开作者提供的 VM 中使用的几乎相同的代码时,它没有标记任何东西......而且代码 运行s!!??
不幸的是,在尝试上述解决方案后,我得到了相同的错误结果。我希望其他人遇到这个问题或者可以根据以上详细信息发现我的错误。
我(部分)解决了这个问题,感谢 Martijn Pietters 的指导。 Scrapy 正在扩展我安装的系统 Python --Python 3.6-- 而不是我的 conda 环境 python --Python 2.7。根据 conda.io/docs/user-guide/tasks/manage-environments.html 和 miniconda 安装文档,将 miniconda 添加到 PATH 会导致 miniconda 环境先于其他环境被调用(如果我理解正确的话)。看来我需要使用Anaconda终端来创建conda环境。我最初使用的是 powershell 终端(认为将 miniconda 添加到路径中就足够了)。希望我已经足够熟练地解释了这一点,让其他人避免我的错误。
此致,
我正在尝试 运行 我自己的 scrapy 项目。该代码基于一本写得很好的书,作者为书中示例的 运行 脚本提供了一个很好的 VM 游乐场。在 VM 中,代码工作正常。但是,在尝试自己练习时,我收到以下错误:
File "(frozen importlib._bootstrap)", line 978, in _gcd_import
File "(frozen importlib._bootstrap)", line 961, in _find_and_load
File "(frozen importlib._bootstrap)", line 950, in _find_and_load_unlocked
File "(frozen importlib._bootstrap)", line 655, in _load_unlocked
File "(frozen importlib._bootstrap_external)", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "C:\users\me\dictionary_com\spiders\basic.py", line 3, in <module>
import urlparse
ModuleNotFoundError: No module named 'urlparse'
我最初有 Python 3 运行ning 在我的主要外部机器上(在 VM 之外),似乎作者正在使用 Python 2(仍然没有'不知道 Atom 编辑器的 flake 8 是如何理解这一点的?)。在查看 urllib 的 Python 2/3 问题后,(python 2 and 3 extract domain from url and Heroku logs say "No module named 'urlparse'" when I use import urlparse and https://github.com/FriendCode/gittle/issues/49) 我尝试了这些链接中提供的各种导入解决方案。我安装了 Python 2.7(并验证它已通过 $python -V -->python2.7.13 设置为路径。我什至尝试创建一个 conda 环境以确保它是拉 python2.7.13.
我的spider.py脚本如下:
import datetime
import urlparse
import socket
import scrapy
from Terms.items import TermsItem
# you have to import processors from scrapy.loader to use it
from scrapy.loader.processors import MapCompose, Join
# you have to import Itemloader from scrapy.loader to use it
from scrapy.loader import ItemLoader
class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
start_urls = [i.strip() for i in open('lused.urls.txt').readlines()]
def parse(self, response):
l = ItemLoader(item=TermsItem(), response=response)
# Load fields using XPath expressions
l.add_xpath('term', '//h1[@class="head-entry"][1]/text()',
MapCompose(unicode.strip, unicode.title))
l.add_xpath('definition', '//*[@class="def-list"][1]/text()',
MapCompose(unicode.strip, unicode.title))
# Housekeeping fields
l.add_value('url', response.url)
l.add_value('project', self.settings.get('BOT_NAME'))
l.add_value('spider', self.name)
l.add_value('server', socket.gethostname())
l.add_value('date', datetime.datetime.now())
return l.load_item()
我的item.py脚本如下:
from scrapy.item import Item, Field
class TermsItem(Item):
# Primary fields
term = Field()
definition = Field()
# Housekeeping fields
url = Field()
project = Field()
spider = Field()
server = Field()
date = Field()
在atom编辑器中,flake8 python检查器flags/underlines(引用:'导入但未使用):
'import urlparse'
'from scrapy.loader.processors import MapCompose, Join'
但是,当我在 Atom 编辑器中打开作者提供的 VM 中使用的几乎相同的代码时,它没有标记任何东西......而且代码 运行s!!??
不幸的是,在尝试上述解决方案后,我得到了相同的错误结果。我希望其他人遇到这个问题或者可以根据以上详细信息发现我的错误。
我(部分)解决了这个问题,感谢 Martijn Pietters 的指导。 Scrapy 正在扩展我安装的系统 Python --Python 3.6-- 而不是我的 conda 环境 python --Python 2.7。根据 conda.io/docs/user-guide/tasks/manage-environments.html 和 miniconda 安装文档,将 miniconda 添加到 PATH 会导致 miniconda 环境先于其他环境被调用(如果我理解正确的话)。看来我需要使用Anaconda终端来创建conda环境。我最初使用的是 powershell 终端(认为将 miniconda 添加到路径中就足够了)。希望我已经足够熟练地解释了这一点,让其他人避免我的错误。
此致,