python - Scrapy 忽略 noindex

标签 python web-crawler scrapy

我正在抓取大量 URL,想知道是否可以让 scrapy 不解析带有“meta name="robots"content="noindex"”的页面? 查看此处列出的拒绝规则 http://doc.scrapy.org/en/latest/topics/link-extractors.html看起来拒绝规则只适用于 URL。你能让 scrapy 忽略 xpath 吗?

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

from wallspider.items import Website


class Spider(CrawlSpider):
    name = "browsetest"
    allowed_domains = ["www.mydomain.com"]
    start_urls = ["http://www.mydomain.com",]

    rules = (
        Rule(SgmlLinkExtractor(allow=('/browse/')), callback="parse_items", follow= True),
        Rule(SgmlLinkExtractor(allow=(),unique=True,deny=('/[1-9]$', '(bti=)[1-9]+(?:\.[1-9]*)?', '(sort_by=)[a-zA-Z]', '(sort_by=)[1-9]+(?:\.[1-9]*)?', '(ic=32_)[1-9]+(?:\.[1-9]*)?', '(ic=60_)[0-9]+(?:\.[0-9]*)?', '(search_sort=)[1-9]+(?:\.[1-9]*)?', 'browse-ng.do\?', '/page/', '/ip/', 'out\+value', 'fn=', 'customer_rating', 'special_offers', 'search_sort=&', 'facet=' ))),
    )

    def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//html')
        items = []

        for site in sites:
            item = Website()
            item['url'] = response.url
            item['canonical'] = site.xpath('//head/link[@rel="canonical"]/@href').extract()
            item['robots'] = site.select('//meta[@name="robots"]/@content').extract()
            items.append(item)

        return items

最佳答案

不幸的是,CrawlSpider 没有提供您想要执行的操作的选项。不过,您可以覆盖它的方法来实现这一点。

尝试将此方法添加到您的蜘蛛:

    def _response_downloaded(self, response):
        # Check whether this page contains the meta noindex in order to skip the processing.
        sel = Selector(response)
        if sel.xpath('//meta[@content="noindex"]'):
            return

        return super(Spider, self)._response_downloaded(response)

每当文档不够时,您可以检查源代码以查看可以更改的内容以及更改的位置,只是要注意您使用的版本。你可以在github中浏览最新的源代码:https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/spiders/crawl.py#L61

但最好检查系统中的源代码。如果您使用的是 IPython,则可以使用 ?? 运算符轻松完成。

关于python - Scrapy 忽略 noindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340097/

相关文章:

Python 请求 (>= 1.*) : How to disable keep-alive?

python - 使用Scrapy解析站点,跟随Next Page,写成XML

python - 我如何在 scrapy python 中编写我的自定义链接提取器

python - 希望在 python 中解析字符串

python - 使用 GridsearchCV 提取管道中最佳模型的 MLPRegressor 属性 (n_iter_ )?

Python:为什么 peek(1) 返回 8K 字节而不是 1 字节?

java - 使用用户名和密码登录后如何抓取网站

java - 使用 URLConnection 加载 xml 内容时出现垃圾

python - Scrapy 与 Nutch

python - 如何捕获文件中格式为(名称): (sentence)\n(name):的所有句子