【发布时间】:2015-09-11 22:17:51
【问题描述】:
所以我有一个scrapy程序,我正试图启动,但我无法让我的代码执行它总是出现以下错误。
我仍然可以使用scrapy shell 命令访问该站点,因此我知道 URL 和其他东西都可以正常工作。
这是我的代码
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from Malscraper.items import MalItem
class MalSpider(CrawlSpider):
name = 'Mal'
allowed_domains = ['www.website.net']
start_urls = ['http://www.website.net/stuff.php?']
rules = [
Rule(LinkExtractor(
allow=['//*[@id="content"]/div[2]/div[2]/div/span/a[1]']),
callback='parse_item',
follow=True)
]
def parse_item(self, response):
mal_list = response.xpath('//*[@id="content"]/div[2]/table/tr/td[2]/')
for mal in mal_list:
item = MalItem()
item['name'] = mal.xpath('a[1]/strong/text()').extract_first()
item['link'] = mal.xpath('a[1]/@href').extract_first()
yield item
编辑:这是踪迹。
Traceback (most recent call last):
File "C:\Users\2015\Anaconda\lib\site-packages\boto\utils.py", line 210, in retry_url
r = opener.open(req, timeout=timeout)
File "C:\Users\2015\Anaconda\lib\urllib2.py", line 431, in open
response = self._open(req, data)
File "C:\Users\2015\Anaconda\lib\urllib2.py", line 449, in _open
'_open', req)
File "C:\Users\2015\Anaconda\lib\urllib2.py", line 409, in _call_chain
result = func(*args)
File "C:\Users\2015\Anaconda\lib\urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\Users\2015\Anaconda\lib\urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error timed out>
编辑2:
因此,使用scrapy shell command 我可以操纵我的回复,但我只是注意到在访问该网站时再次出现相同的错误
编辑3:
我现在发现错误出现在我使用 shell command 的每个网站上,但我仍然能够操纵响应。
编辑4:
那么我如何验证我在运行crawl command 时至少收到了来自 Scrapy 的响应?
现在我不知道是我的代码导致我的日志为空还是错误?
这是我的 settings.py
BOT_NAME = 'Malscraper'
SPIDER_MODULES = ['Malscraper.spiders']
NEWSPIDER_MODULE = 'Malscraper.spiders'
FEED_URI = 'logs/%(name)s/%(time)s.csv'
FEED_FORMAT = 'csv'
【问题讨论】:
-
能否发布异常回溯?
-
您还确定您的网址返回正确的响应吗?也许网站只是超时?你爬的是哪个网站
-
我 100% 确定它会返回正确的响应,我使用 shell 命令来验证我的 xpath。
-
这不是scrapy错误这看起来像boto错误\Users\2015\Anaconda\lib\site-packages\boto\utils.py你的错误是boto试图连接某处并超时它不是scrapy蜘蛛
-
您的安装中似乎有一些疯狂的东西,您可以尝试打开文件“C:\Users\2015\Anaconda\lib\site-packages\boto\utils.py”插入:来自 pdb导入设置跟踪;第 210 行的 set_trace() 并检查 boto 尝试连接的位置?你应该有 urllib 请求对象,所以你应该得到它尝试请求的 url
标签: python web-scraping scrapy