如何让Scrapy蜘蛛拒绝国家域名

时间:2016-05-20 23:23:35

标签: python scrapy scrapy-spider

我正试图让我的scrapy蜘蛛拒绝.com域名。传递给deny_domains的正确字符串是什么?我试过“* .com”,但它不起作用。

问题更新:我怎样才能做到相反?例如,如果我只想刮掉.com域名

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from myproject.items import MyprojectItem

class pformSpider(CrawlSpider):
    name = "pform6"

    start_urls = [
        "http://example.se",
    ]

    extractor = SgmlLinkExtractor(deny_domains=("*.com"))

    rules = (
        Rule(extractor,callback='parse_links',follow=True),
        )

    def parse_links(self, response):
        item = MyprojectItem()
        item['url'] = response.url
        yield item

3 个答案:

答案 0 :(得分:3)

from scrapy.linkextractors import LinkExtractor
...
    rules=(
        Rule(LinkExtractor(deny=('.+\.com', ))),
    )

答案 1 :(得分:2)

您可以使用scrapy.linkextractors

来自http://doc.scrapy.org/en/latest/topics/link-extractors.html

  

deny_domains(str或list) - 单个值或字符串列表   包含不会被考虑用于提取链接的域

但是

  

deny(正则表达式(或列表)) - 单个正则表达式   (绝对)URL必须匹配的(或正则表达式列表)   为了被排除(即未提取)。

所以你可以使用带有“deny”的正则表达式,我想像是

".*\.com\/.*"

但它可能与网址中的其他位置匹配。

答案 2 :(得分:0)

基于documentation我说你需要做这样的事情:

extractor = SgmlLinkExtractor(allow="*.com")

注意:我没有测试过。

  

参数:allow(str或list) - 单个正则表达式(或   (绝对)网址必须匹配的正则表达式列表   为了被提取。如果没有给出(或为空),它将匹配所有   链接。