2016-05-20 2 views
0

Я пытаюсь сделать мой scrapy spider отрицающим .com домены. Какая правильная строка передается deny_domains? Я пробовал «* .com», но он не работает.Как сделать Scrapy spider для отказа в доменах домена

Вопрос ОБНОВЛЕНИЕ: Как я могу сделать наоборот? Например, если я только хочу, чтобы скоблить .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 
+0

Знаете ли вы, что '* .' делает в регулярном выражении? –

ответ

2

Вы можете использовать scrapy.linkextractors

От http://doc.scrapy.org/en/latest/topics/link-extractors.html

deny_domains (ул или список) - единственное значение или список строки , содержащие домены, которые не будут рассматриваться для извлечения ссылок

Но

отрицают (регулярное выражение (или список)) - регулярное выражение, (или список регулярных выражений), что (абсолютные) URLs должны соответствовать для того, чтобы быть исключен (т.е.. не извлекается).

Таким образом, вы можете использовать регулярное выражение с «отрицать» Я думаю, что-то вроде

".*\.com\/.*" 

Но это может соответствовать в другом месте в URL.

+0

Хорошо, можно ли сделать наоборот, если я хочу только очистить домены домена .com? – codeer

+0

Вы можете использовать одно и то же регулярное выражение, разрешающее - «разрешать (регулярное выражение (или список)) - одно регулярное выражение (или список регулярных выражений), для которого (абсолютные) URL должны совпадать, чтобы их извлечь». –

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

Основываясь на documentation я бы сказал, что вам нужно сделать что-то вроде этого:

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

Примечание: Я не проверял это.

Параметры: разрешить (ул или список) - одно регулярное выражение (или список регулярных выражений), что (абсолютные) URLs должны соответствовать в для того, чтобы извлечь. Если не указано (или пусто), оно будет соответствовать всем ссылкам .

 Смежные вопросы

  • Нет связанных вопросов^_^