如何获取所有新闻文章网址?
How to fetch all news article urls?
我可以很容易地从文章 url 以这种方式组织的网站上抓取所有新闻文章:http://samplenewsagency.com/en/news/12563
。只需一个应该生成一些数字并替换为 12563
以查找另一条新闻。
但是对于像 http://gcaptain.com
这样以这种方式组织新闻的网站可以做些什么:http://gcaptain.com/chinese-aircraft-carrier-sails-hong-kong-maiden-visit/
。
我怎样才能找到所有新闻网址?
检查给定的网站 gcaptain.com 之后,最简单的方法似乎是基于 CrawlSpider
class 创建爬虫并使用规则指定要遵循的链接。这是最简单的例子:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class GcaptainSpider(CrawlSpider):
name = 'gcaptain'
allowed_domains = ['gcaptain.com']
start_urls = ['http://gcaptain.com/']
rules = (
Rule(LinkExtractor(restrict_xpaths='//article//h2/a'), callback='parse_article', follow=True),
)
def parse_article(self, response):
item = {}
item['title'] = response.xpath('//article//header/h1/text()').extract_first()
return item
它假定可以使用 XPath 表达式 //article//h2/a
找到指向新闻文章的所有链接,并仅从文章中提取标题。这个例子不会给你所有的文章,因为网站使用无限滚动机制,你必须考虑到加载所有新闻。如何做到这一点可以在 this Scrapinghub 博客 post.
中阅读
我可以很容易地从文章 url 以这种方式组织的网站上抓取所有新闻文章:http://samplenewsagency.com/en/news/12563
。只需一个应该生成一些数字并替换为 12563
以查找另一条新闻。
但是对于像 http://gcaptain.com
这样以这种方式组织新闻的网站可以做些什么:http://gcaptain.com/chinese-aircraft-carrier-sails-hong-kong-maiden-visit/
。
我怎样才能找到所有新闻网址?
检查给定的网站 gcaptain.com 之后,最简单的方法似乎是基于 CrawlSpider
class 创建爬虫并使用规则指定要遵循的链接。这是最简单的例子:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class GcaptainSpider(CrawlSpider):
name = 'gcaptain'
allowed_domains = ['gcaptain.com']
start_urls = ['http://gcaptain.com/']
rules = (
Rule(LinkExtractor(restrict_xpaths='//article//h2/a'), callback='parse_article', follow=True),
)
def parse_article(self, response):
item = {}
item['title'] = response.xpath('//article//header/h1/text()').extract_first()
return item
它假定可以使用 XPath 表达式 //article//h2/a
找到指向新闻文章的所有链接,并仅从文章中提取标题。这个例子不会给你所有的文章,因为网站使用无限滚动机制,你必须考虑到加载所有新闻。如何做到这一点可以在 this Scrapinghub 博客 post.