def parse(self, response):
# 提取出html页面中的所有url,并跟踪这些url进行进一步爬取
# 如果提取的url中格式为/question/xxx 就下载之后直接进入解析函数
all_urls = response.css(" a::attr(href)").extract()
# 为所有的urls添加域名
all_urls = [parse.urljoin(response.url, url) for url in all_urls]
# 过滤url
all_urls = filter(lambda x: True if x.startwith("https") else False, all_urls)
for url in all_urls:
# if url.startwith("https")
match_obj = re.match("(.*zhihu.com/question/(\d+))(/|$).* ", url)
if match_obj:
# 如果提取到question相关的页面后交给提取函数进行提取
request_url = match_obj.group(1)
question_id = match_obj.group(2)
# 提交给下载器
yield scrapy.Request(request_url, headers=self.header, callback=self.parse_question)
else:
# 如果不是question页面则直接进一步跟踪
yield scrapy.Request(url, headers=self.headers, callback=self.parse)
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
了解课程