这是我第一次创建蜘蛛,尽管我付出了努力,它仍然没有返回我的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"
运行它你能给我一个提示吗?
答案 0 :(得分:1)
蜘蛛中的多个问题:
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
答案 1 :(得分:0)
一个问题可能是,该网站的robots.txt禁止您访问 您可以从日志跟踪中进行检查。 如果是这样,请转到您的settings.py并使ROBOTSTXT_OBEY = False 那解决了我的问题