我正在尝试从脚本运行scrapy spider而不是从命令终端运行它,如下所示:
scrapy crawl spidername
在scrapy文档中,我找到了以下示例:https://doc.scrapy.org/en/latest/topics/practices.html。
现在,我的代码如下所示:
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.loader import ItemLoader
from properties.items import PropertiesItem
class MySpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
start_urls = ['http://www.example.com']
def parse(self, response):
l = ItemLoader(item=PropertiesItem(), response = response)
l.add_xpath('title', '//h1[1]/text()')
return l.load_item()
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished
当我运行此脚本时,我收到以下错误:
文件 “/Library/Python/2.7/site-packages/Twisted-16.7.0rc1-py2.7-macosx-10.11-intel.egg/twisted/internet/_sslverify.py”,第38行,TLSVersion.TLSv1_1:SSL.OP_NO_TLSv1_1 , AttributeError:'module'对象没有属性'OP_NO_TLSv1_1'
所以我的问题是:
1)这是什么错误?我无法在网上找到任何例子。
2)我可以通过此脚本更改scrapy的运行方式吗?
更新:
添加了为项目安装的软件包
attrs==16.3.0
Automat==0.3.0
cffi==1.9.1
characteristic==14.3.0
constantly==15.1.0
cryptography==1.7.1
cssselect==1.0.0
enum34==1.1.6
idna==2.2
incremental==16.10.1
ipaddress==1.0.17
lxml==3.7.1
parsel==1.1.0
pyasn1==0.1.9 pyasn1-
modules==0.0.8
pycparser==2.17
PyDispatcher==2.0.5
pyOpenSSL==0.15.1
queuelib==1.4.2
Scrapy==1.3.0 service-
identity==16.0.0
six==1.10.0
tree==0.1.0
Twisted==16.6.0
virtualenv==15.1.0
w3lib==1.16.0 zope.
interface==4.3.3
答案 0 :(得分:0)
我找到了解决方案:
创建了一个基于python 3.6而不是python 2.7的新虚拟环境。我运行完全相同的代码(不得不用urllib.parse替换urlparse)并且它有效!
答案 1 :(得分:-1)
1)我不确定
2)但是你的缩进需要审查:
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.loader import ItemLoader
from properties.items import PropertiesItem
class MySpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
start_urls = ['http://www.example.com']
def parse(self, response):
l = ItemLoader(item=PropertiesItem(), response = response)
l.add_xpath('title', '//h1[1]/text()')
return l.load_item()
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished
我在代码中假设各种其他东西。即运行下面的蜘蛛,你需要输入
scrapy crawl basic
并且您有一个名为" properties"的文件夹。使用文件" items"在其他等