【问题标题】:Restrict scrapy from crawling subdomains限制scrapy爬取子域
【发布时间】:2017-07-17 13:15:15
【问题描述】:

我有大约 200 个域需要抓取,但我确信子域中没有包含对我来说有价值的信息,因此我想将它们排除在抓取之外。

对于域 example.com,我可以使用拒绝规则

(www.)*\w+\.example

但是这种方法会让我为每个域编写 200 条拒绝规则。我的问题是是否可以为每个域的所有子域创建拒绝规则?

蜘蛛的片段:

class Spider(CrawlSpider):
    name = "courses"
    start_urls = [
        'https://www.eb-zuerich.ch',
]

    allowed_domains = ['eb-zuerich.ch',]


    rules = [
    Rule(LinkExtractor(allow=(),
                       deny=(r'.+[sS]itemap', r'.+[uU]eber', r'.+[kK]ontakt', r'.+[iI]mpressum',
                        r'.+[lL]ogin', r'.+[dD]ownload[s]?', r'.+[dD]isclaimer',
                        r'.+[nN]ews', r'.+[tT]erm', r'.+[aA]nmeldung.+',
                        r'.+[Aa][Gg][Bb]', r'/en/*', r'\.pdf$')),
         callback='parse_item', follow=True)
]

    def parse_item(self, response):

        # get soup of the current page
        soup = bs(response.body, 'html.parser')
        page_soup = bs(response.body, 'html.parser')

        # check if it is a course description page
        ex = Extractor(response.url, soup, page_soup)
        is_course = ex.is_course_page()
        if is_course:
            ex.save_course_info()

我正在使用 Scrapy 1.4.0 和 Python 3.6.1

【问题讨论】:

  • “拒绝规则”是什么意思?你在哪里定义这些规则?到目前为止,您能分享您的蜘蛛代码吗?哪些对您的用例有效,哪些无效?
  • @paultrmbrth 拒绝规则是蜘蛛类中定义的蜘蛛爬行规则的一部分。请查看我添加到问题中的代码。

标签: regex python-3.x scrapy web-crawler


【解决方案1】:

我的问题是是否可以为每个域的所有子域创建拒绝规则?

采用简单的方法(忽略.co.uk等顶级域名):

r'^(https?)?//([^./]+\.){2,}[^./]+(/|$)'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多