我有大约需要抓取的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
答案 0 :(得分:0)
我的问题是是否可以为每个域的所有子域创建一个拒绝规则?
采用简单化的方法(忽略诸如ExtraProps
之类的顶级域名):
.co.uk