我正试图让我的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
答案 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) - 单个正则表达式(或 (绝对)网址必须匹配的正则表达式列表 为了被提取。如果没有给出(或为空),它将匹配所有 链接。