我试图在以下网站上抓取所有相关字段,以便将所有数据加载到电子表格中:

http://yellowpages.com.gh/Home.aspx?

我猜想是我想要的CrawlSpider,所以这就是我一直在尝试构建的东西:


from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
class YellowGH2Spider(CrawlSpider):
    name = "yellowGH2"
    allowed_domains = ["yellowpages.com.gh"]
    start_urls = ["http://yellowpages.com.gh/Home.aspx"]
    rules = (
        Rule(SgmlLinkExtractor(allow=(r'http://yellowpages.com.gh/Home.aspx?mcaid=\d+#tabs-2', ))),
        Rule(SgmlLinkExtractor(allow=(r'http://yellowpages.com.gh/(Home|Search-Results).aspx?mcaid=[0-9&eca1id=]+(&lcaid=)?\d+#tabs-2', )), callback='parse_item'),
        Rule(SgmlLinkExtractor(allow=(r'http://yellowpages.com.gh/Company-Details/[a-zA-Z0-9-]+.aspx?returnurl=/Search-Results.aspx', )), callback='parse_item'),
        )
    def parse(self, response):
        #hxs = HtmlXPathSelector(response)
        #filename = response.url.split("/")[-2]
        #open(filename, 'wb').write(response.body)

        sel = Selector(response)
        item = Item()
        #item['catName']=sel.xpath('//div[@class="oneDirCat"]/h3/a/text()').extract()
        item['catLink']=sel.xpath('//div[@class="oneDirCat"]/h3/a/@href').extract()
        item['subcatText']=sel.xpath('//ul/li/a/@href').extract()
        item['subcatLink']=sel.xpath('//div[@class="oneDirCat"]/h3/a/text()').extract()
        item['company']=sel.xpath('//label/text()').extract()
        item['more']=sel.xpath('//td[@valign="bottom"]/a/@href').extract()
        item['address']=sel.xpath('//td[2]/text()').extract()
        item['postAddress']=sel.xpath('//td[4]/text()').extract()
        item['city']=sel.xpath('//td[6]/text()').extract()
        item['region']=sel.xpath('//td[8]/text()').extract()
        item['mobile']=sel.xpath('//td[12]/text()').extract()
        item['emailtext']=sel.xpath('//td[16]/a/text()').extract()
        item['emailLink']=sel.xpath('//td[16]/a/@href').extract()
        item['webtext']=sel.xpath('//td[18]/a/text()').extract()
        item['webLink']=sel.xpath('//td[18]/a/@href').extract()
        return item


            #print catName, catLink, subcatText, subcatLink, company, more,
            #address, postAddress, city, region, mobile, emailtext, emailLink,
            #webtext, webLink

但是,在命令提示符上运行此命令时,出现以下错误:

exceptions.KeyError:'项目不支持字段:catLink'

发生此类错误的最可能原因是什么? 它可以与XPaths的格式关联吗? 还是可能与该蜘蛛与项目中原始蜘蛛共享相同的items.py文件这一事实有关?

我的items.py代码如下:

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

from scrapy.item import Item, Field

class YellowghItem(Item):
    # define the fields for your item here like:
    # name = Field()
      catName = Field()
      catLink = Field()
      subcatText = Field()
      subcatLink = Field()
      company = Field()
      more = Field()
      address = Field()
      postAddress = Field()
      city = Field()
      region = Field()
      mobile = Field()
      emailtext = Field()
      emailLink = Field()
      webtext = Field()
      webLink = Field()

      #pass

===============>>#1 票数:4

因此,这就是您看到错误的原因。 您的item.py文件已定义了类YellowghItem 此类具有类成员catLink

但是在您的Spider中,您没有实例化此类。 相反,您要实例化Item()类。 我敢打赌,您的项目中还有一个名为Item类,该类没有将catLink定义为其成员。

在您的蜘蛛中进行以下更改:

  • 更改从scrapy.item import YellowghItem
  • 在您的parse方法中,使用以下方法实例化此类的对象:

     item = YellowghItem() 

尝试这些更改,我认为您将能够解决此错误。

希望这可以帮助。

  ask by Seraphina translate from so

未解决问题?本站智能推荐:

1回复

Scrapy Spider中的xpath / regex问题

我正在尝试从ul标签(id =“ ShowProductImages”)的“上一个兄弟”中的onclick标签中提取产品ID。 我要提取的数字直接在?pid =之后,例如: ...列表/ ViewAll?pid = 234565 &image = 206 ... 以下是我要从中
2回复

在Scrapy中添加了对页面ID的迭代,解析方法中的响应不再运行

我的Spider中有一些用于调试的打印功能。 在start_request函数中,我通过在范围为[0,4]的数字上加上基本URL生成URL,该基本URL由parse_grant函数解析。 parse_grant该函数中,第一个print函数被调用,但第二个不被调用。 仍然在这里学习,所以
2回复

Scrapy SgmlLinkExtractor如何定义XPath

我想检索城市名称和城市代码,并将其存储在一个字符串变量中。 该图显示了精确的位置: 谷歌浏览器为我提供了以下XPath: 因此,我草率地定义了以下语句以获取所需的信息: 但是我没有成功,字符串仍然为空。 应该改用什么XPath定义?
1回复

Scrapy:如何获取某些特定文本之后的信息?

我正在使用Scrapy来获取我所在地区的公寓价格。 在广告说明中,有一个带有属性的列表,如下所示: 我的问题是,其中一些属性(例如年税和停车位)并未在所有广告中展示。 这意味着我不能简单地使用带有#-index的extract()来获取该信息,因为我可能会捕获错误类别的信息。
2回复

Escape美元符号

使用沙哑的蜘蛛及其以错误的价格拉动输出。 HTML: Xpath: 结果: 似乎是价格中的“ $”引起了问题。 我一直在发掘,似乎无法找到我认为将是一个常见问题的答案,这使我认为这可能是我所缺少的更多问题。 任何帮助是极大的赞赏!
1回复

scrapy的问题:xpath和regex-正则表达式无法正常工作

这是上下文:我正在尝试在网站上检索多个日期,并将其放入“双倍列表”中,如下所示: 注意:在第二个日期中,要检索的日期只有一天。 因此,日期在HTML代码中的组织方式如下: 所以在这里我想使用XPATH和REGEX来获得完全如下所示的内容: 所以我正在使用这个Xpat
1回复

如何在python scrapy中使用xpath获取项目数组?

我需要从html页面获取并解析div的数组。 我这样写: 完整的xpath是: //*[@id="wall-28701979_XXXXX"]/div[2]/div[1]/text() ,其中XXXXX-随机5位数字。 因此,我需要从页面获取所有此类元素。 但是我有一个excepti
1回复

如何使用XPath和Scrapy选择特定类型的URL

我试图从包含如下链接的HTML中仅选择http://lyricsindia.net/songs/show/*类型的链接: 我已经阅读了Scrapy文档,但无法弄清楚。 有任何想法吗?
1回复

Scrapy SgmlLinkExtractor如何在span标签内获取数字

如何获得在此特定位置突出显示的整数: 我从Google Chrome获得了以下XPath: 因此,我很高兴地定义了以下XPath语句以获取数字: 但是变量id仍然为空,我的蜘蛛似乎没有抓取任何信息。 我应该如何重写语句才能访问此特定元素?
2回复

scrapy选择器xpath提取匹配的正则表达式或切片字符串

我是一名新手,对Python很感兴趣。 我想检索item ['rating']。 评级采用字符串形式“评级为4”,但我只需要数字...我如何获得它? 我在下面的解决方案中强调这些,但是不知道它们是否有意义。 而且没有任何工作。 要么 非常感谢您的帮助,对不起我的英