【问题标题】:Making Scrapy only crawl descendant links让 Scrapy 只抓取后代链接
【发布时间】:2014-09-10 13:18:39
【问题描述】:

我有以下 Scrapy 代码,我用它来尝试从代码中的网站仅抓取英超联赛数据:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
from scrapy.spider import BaseSpider
from scrapy import log
from scrapy.cmdline import execute
from scrapy.utils.markup import remove_tags
import time


class ExampleSpider(CrawlSpider):
    name = "goal3"
    allowed_domains = ["whoscored.com"]
    start_urls = ["http://www.whoscored.com/Regions/252/Tournaments/2/Seasons/3853/Stages/7794/PlayerStatistics/England-Premier-League-2013-2014"]
    download_delay = 1
    rules = [Rule(SgmlLinkExtractor(allow=()), 
                  follow=True),
             Rule(SgmlLinkExtractor(allow=()), callback='parse_item')
    ]
    def parse_item(self,response):
        self.log('A response from %s just arrived!' % response.url)
        scripts = response.selector.xpath("normalize-space(//title)")
        for scripts in scripts:
            body = response.xpath('//p').extract()
            body2 = "".join(body)
            print remove_tags(body2).encode('utf-8')  


execute(['scrapy','crawl','goal3'])

代码似乎在做的是将它的起点作为英超联赛数据的链接,然后抓取其中包含的所有链接,即使该链接指向与英超联赛数据无关的网站部分.实际上,它最终会爬取整个网站,而不是从主页。

有没有办法让 Scrapy 只从你的起点抓取依赖链接?

谢谢

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    您需要配置rules,以便仅为specific tournament提取链接:

    rules = [
        Rule(SgmlLinkExtractor(allow=('Regions/252/Tournaments/2', )), 
             callback='parse_item', 
             follow=True)
    ]
    

    【讨论】:

    • @alexce 在这个例子中我的 allowed_domains 和 start_urls 应该是什么?谢谢
    • 这现在几乎不会返回任何已爬取的页面......就像之前有数千个时可能有十个左右。我原以为至少应该有数百个链接返回。
    • @user3045351 好的,我认为它应该是这样工作的,它从您指定的链接开始,并且只跟随锦标赛中的链接。你想要的结果是什么?
    • 是的,你是对的。从英超联赛的顶级页面开始,然后抓取所有后续页面,以便我得到诸如球员、球队等的个人页面......无论那里有什么......在它爬取了数万页之前,现在它在哪里爬了 10-20 页
    • @user3045351 好了,你可以从主页开始:start_urls = ['whoscored.com']。在这种情况下,关于比赛的一切都会被抓住。让我知道它是否有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多