簡體   English   中英

Scrapy:蜘蛛什么都不返回

[英]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.cs​​v”運行它

你能給我一個提示什么是錯的嗎?

蜘蛛中的多個問題:

  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM