开始
导入 scrapy 模块, 并创建一个 spider 的 class. 并继承 scrapy.Spider。(使用默认模板就好)
parse函数
def parse(self, response): urls = response.css('a::attr(href)').extract() urls = [parse.urljoin(response.url,url) for url in urls] for url in urls: re_match = re.match('(https://www.zhihu.com/question/([0-9]+))/?.*', url) if re_match: question_url = re_match.group(1) question_id = re_match.group(2) yield Request(question_url, callback=self.parse_questions, headers=self.headers, meta={'question_id': question_id}) else: yield Request(url, callback=self.parse, headers=self.headers)
1.xpath()和css()方法返回的是SelectorList实例,是一个选择器列表,要使用.extract()方法来提取最终的数据。如果只想获得第一个匹配的,可以使用.extract_first()
2.scrapy中response提取的没有主域名的url拼接。url = parse.urljoin(response.url, get_url)
这里他把循环也写进去了