【问题标题】:How to fetch all news article urls?如何获取所有新闻文章网址?
【发布时间】:2017-07-09 08:35:55
【问题描述】:
我可以轻松地从文章网址以这种方式组织的网站中抓取所有新闻文章:http://samplenewsagency.com/en/news/12563。一个人应该生成一些数字并替换为12563 以查找另一条新闻。
但是对于像http://gcaptain.com 这样以这种方式组织新闻的网站可以做些什么:http://gcaptain.com/chinese-aircraft-carrier-sails-hong-kong-maiden-visit/。
如何找到所有新闻网址?
【问题讨论】:
标签:
python
url
web-scraping
scrapy
urlfetch
【解决方案1】:
检查给定的网站gcaptain.com 之后,最简单的方法似乎是基于CrawlSpider 类创建蜘蛛并使用规则指定要遵循的链接。这是最简单的例子:
# -*- 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 找到,并仅从文章中提取标题。此示例不会为您提供所有文章,因为该网站使用无限滚动机制,您必须考虑加载所有新闻。例如,可以在 thisScrapinghub 博客文章中阅读如何做到这一点。