使用 Scrapy 抓取“paginasamarillas.es”

问题描述 投票:0回答:1

您好,我使用 scrapy 来抓取 paginasamarillas.es 但我没有得到结果,这些是我的代码。请您帮我解决这个问题吗?

from scrapy.item import Item, Field

class AyellItem(Item):
name = Field()
pass

这是蜘蛛

from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from ayell.items import AyellItem

    class YellSpider(CrawlSpider):
    name = 'yell'
    allowed_domains = ['http://www.paginasamarillas.es']
    start_urls = ['http://www.paginasamarillas.es/alimentacion/all-ma/all-pr/all-is/all-ci/all-ba/all-pu/all-nc/1']



    def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        directors = hxs.select("/html/body")
        items = []
        for directors in directors:
            item = AyellItem()
            item ["name"] = directors.select("/h1").extract()   
            items.append(item)
            return items

这就是我得到的

2015-07-31 19:11:25-0300 [大喊]调试:爬行(200)http://www.paginasamarillas.es/alimentacion/all-ma/all-pr/all-is/all-ci/所有-ba/所有-pu/所有-nc/1> (参考:无) 2015-07-31 19:11:25-0300 [大喊] INFO: 关闭蜘蛛(完成) 2015-07-31 19:11:25-0300 [yell] 信息:转储蜘蛛统计信息:{'downloader/request_bytes': 267, 'downloader/request_count': 1,
'下载器/request_method_count/GET':1,
'下载器/response_bytes':30509,'下载器/response_count':1, 'downloader/response_status_count/200': 1, 'finish_reason': '完成', 'finish_time': datetime.datetime(2015, 7, 31, 22, 11, 25, 731485), '调度程序/内存_入队': 1,

python web-scraping scrapy
1个回答
0
投票

首先,看起来这是一只新蜘蛛。 如果可以的话,我建议更新到 Scrapy 1.0.1,而不是继续使用 0.24(或更低版本)。

AyellItem
有一个缩进错误,尽管这可能只是您将其输入到 SO 中的方式。 此外,您的
pass
没有任何目的。

对于蜘蛛本身来说,有几个值得注意的问题:

  • 您没有指定任何规则。 蜘蛛在检索第一页后将不会处理任何链接。
  • 您没有解析第一页的内容。 为此,您需要重写
    parse_start_url(response)
    方法。
  • 您的 XPath 选择器不适用于提供的页面。 页面上只有一个
    <h1>
    元素,并且不在
    /html/body/h1
    处。 您想要的项目是嵌套在类为“contenido”的 div 中的列表项目(
    <li>

阅读CrawlSpiderScrapy Selectors,并全面熟悉您正在使用的技术应该会对您有所帮助。 祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.