[英]Scrapy: spider returns nothing
這是我第一次創建蜘蛛,盡管我付出了努力,但它仍然沒有為我的 csv 導出返回任何內容。 我的代碼是:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
class Emag(CrawlSpider):
name = "emag"
allowed_domains = ["emag.ro"]
start_urls = [
"http://www.emag.ro/"]
rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow= True))
def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//a/@href').extract()
for site in sites:
site = str(site)
for clean_site in site:
name = clean_site.xpath('//[@id=""]/span').extract()
return name
問題是,如果我打印這些站點,它會給我一個 URL 列表,這是可以的。 如果我在 scrapy shell 中的 URL 之一中搜索名稱,它會找到它。 問題是當我抓取所有鏈接中的所有名稱時。我用“scrapy crawl emag>emag.csv”運行它
你能給我一個提示什么是錯的嗎?
蜘蛛中的多個問題:
rules
應該是一個可迭代的,最后一個括號前缺少逗號Item
- 您需要定義一個Item
類並從蜘蛛parse()
回調中返回/產生它這是蜘蛛的固定版本:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Field, Item
class MyItem(Item):
name = Field()
class Emag(CrawlSpider):
name = "emag"
allowed_domains = ["emag.ro"]
start_urls = [
"http://www.emag.ro/"]
rules = (Rule(SgmlLinkExtractor(allow=(r'www.emag.ro')), callback="parse", follow=True), )
def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//a/@href')
for site in sites:
item = MyItem()
item['name'] = site.xpath('//[@id=""]/span').extract()
yield item
一個問題可能是,您已被該站點的 robots.txt 禁止您可以從日志跟蹤中查看。 如果是這樣,請轉到您的 settings.py 並使 ROBOTSTXT_OBEY=False 解決了我的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.